题目描述
只包含质因子2、3和5的数称作丑数(UglyNumber)。例如6、8都是丑数,但14不是,因为它包含质因子7,习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

思路:
1、逐个判断
逐个判断每个整数是不是丑数。根据丑数的定义,丑数只能被2,3,5整除,也就是说,如果一个数能被2整除,连续除以2;如果能被3整除,连续除以3;如果能被5整除,连续除以5,如果最后得到1,那么这个数就是丑数,否则就不是。

2、创建数组保存已经找到的丑数
第一种方法效率比较低,因为该方法对每个数无论是丑事还是非丑数,都进行了计算判断,这在一定程度上是浪费。

根据丑数的定义,后面的丑数应该是前面丑数的2,3,5的倍数结果,因此我们可以创建一个数组,里面的数字是排好序的丑数,每一个丑数都是前面的丑数乘以2,3,5得到。

那么如何保证排序呢?假设当前数组中最大的丑数为M,我们把已有的每个丑数分别乘以2,3,5(实际上并不需要对每个丑数做乘积,只需每次保存上一次的位置即可),分别得到第一个乘以2后大于M的结果2M,第一个乘以3后大于M的结果3M,第一个乘以5后大于M的结果3M,那么下一个丑数就是2M,3M,5M的最小者。

代码:
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index <= 0)
return 0;
vector<int> nums(index);
nums[0] = 1;
int nextIndex = 1;
int index2 = 0, index3 = 0, index5 = 0;
while(nextIndex < index){
nums[nextIndex] = min(nums[index2]*2, min(nums[index3]*3, nums[index5]*5));
if(nums[index2]*2 <= nums[nextIndex]) ++index2;
if(nums[index3]*3 <= nums[nextIndex]) ++index3;
if(nums[index5]*5 <= nums[nextIndex]) ++index5;
++nextIndex;
}
return nums[index-1];
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

---------------------

剑指offer——丑数(c++)的更多相关文章

  1. 剑指Offer——丑数

    剑指Offer--丑数 前言     参照<剑指Offer>,通过洞悉其思想并消化吸收,改为java实现,供自己以后巩固. package cn.edu.ujn.offersword; i ...

  2. 剑指Offer丑数问题

    这是剑指第一次卡死我的题……记录一下 首先看题目: 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数 ...

  3. 剑指offer 丑数

    思路:可以发现,每个丑数都是由以前的丑数得到.当前丑数一定是之前丑数能够得到的最小丑数. AC代码 class Solution { public: int GetUglyNumber_Solutio ...

  4. 用js刷剑指offer(丑数)

    题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路 ...

  5. 剑指offer--33.丑数

    本来用数组做标志位,但是测试数据有第1500个,859963392,惹不起哦 ------------------------------------------------------------- ...

  6. 剑指Offer-32.丑数(C++/Java)

    题目: 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 分析: ...

  7. 剑指Offer32 丑数

    /************************************************************************* > File Name: 32_UglyNu ...

  8. 干货 | 剑指offer系列文章汇总

    下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现  剑指offer系列  始 剑指offer—灯管问题(1)  剑指offer—10人电梯(2)  ...

  9. 【剑指offer】丑数

    把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. leetcode上也 ...

随机推荐

  1. 阿里云Linux服务器购买、配置

    购买.配置阿里云Linux服务器配置ftp发布网站全教程 http://blog.csdn.net/Jolesen/article/details/77505840

  2. shell正则匹配IP地址

    IP分成5大类: A类地址 ⑴ 第1字节为网络地址,其它3个字节为主机地址. ⑵ 范围:1.0.0.1—126.155.255.254 ⑶ 私有地址和保留地址: ① 10.X.X.X是私有地址(只能在 ...

  3. 微信公众号的SpringBoot+Quartz的定时任务Demo

    SpringBoot整合quartz并不难,难在普通类实现了Job接口后等于实例化交给quartz,不受Spring管理,则service层等等其他依赖的注入将无法注入,这也是难点之一. 解决方法: ...

  4. tomcat 高并发

    转自 http://blog.csdn.net/feng27156/article/details/19420695 一.容器简化了程序员自身的多线程编程. 各种Web容器,如Tomcat,Resio ...

  5. 机器学习之KNN---k最近邻算法-机器学习

    KNN算法是机器学习中入门级算法,属于监督性学习算法.SupervisedLearning. 通过Plinko游戏来介绍该算法. 就是随机在上面投球,然后球进下面的哪个地方就得多少分. 然后在规定得投 ...

  6. USB编程概念

     RE:USB编程概念 >请你指导我如何学习USB虚拟COM端口PROGRAMM,什么是我们needto有(如硬件和软件)的东西. USB是一个典型的复杂的协议栈,在协议的协议.这是很难完全实现 ...

  7. JS-ValidForm:介绍

    ylbtech-JS-ValidForm:介绍 1.返回顶部 1. 关于Validform Validform:一行代码搞定整站的表单验证! 1 $(".demoform").Va ...

  8. 79、tensorflow计算一个五层神经网络的正则化损失系数、防止网络过拟合、正则化的思想就是在损失函数中加入刻画模型复杂程度的指标

    ''' Created on Apr 20, 2017 @author: P0079482 ''' import tensorflow as tf #获取一层神经网络边上的权重,并将这个权重的L2正则 ...

  9. 发送邮件 django

    https://blog.csdn.net/qq_39138295/article/details/82527868 https://www.cnblogs.com/yoyoketang/p/1048 ...

  10. jmeter 函数学习

    https://jmeter.apache.org/usermanual/functions.html#__threadNum