博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】丑数
阅读量:4671 次
发布时间:2019-06-09

本文共 1181 字,大约阅读时间需要 3 分钟。

题目链接:

 

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

 

题解:这题最开始是暴力做的。就是根据定义,依次做判断。然后TLE了。emmm...然后就有了接下来的解法。

因为这个number只包含2,3,5的因子,所以根据以2,3,5来做判断和维护。令number数组里的第一个元素为1。因为我们要让丑数数列有序,所以要每次使这三个因子组成的最小的数进入数组。

ugly:1

array 2: 2

array 3: 3
array 5: 5
比较(2,3,5)->min_n = 2,2进入ugly[]

 

 

ugly:1 2

array 2: 4
array 3: 3 6
array 5: 5 10

然后比较当前的值(4,3,5),3再进入ugly[]

怎么保证每次都是比较最前面的数呢。我们用做标记的方式实现。

i2,i3,i5来表示当前的位置。如果当前的number能除尽它们,指针就向后移。

 

代码:

1 public class Solution { 2     public int GetUglyNumber_Solution(int index) { 3         if(index <= 0){ 4             return 0; 5         } 6         int []ugly = new int[index]; 7         int i2=0; 8         int i3=0; 9         int i5=0;10         int cnt = 0;11         ugly[0] = 1;12         int num = 0;13         while(cnt < index-1){14             num = Math.min(ugly[i2]*2,Math.min(ugly[i3]*3,ugly[i5]*5));15             if(num == ugly[i2] * 2)    i2++;16             if(num == ugly[i3] * 3)    i3++;17             if(num == ugly[i5] * 5)    i5++;18             ugly[++cnt] = num;19             20         }21         return ugly[index-1];22     }23 }

 

转载于:https://www.cnblogs.com/Asumi/p/10489107.html

你可能感兴趣的文章
C/C++中printf和C++中cout的输出格式
查看>>
C# CharacterToBinary 将类似2进制字符串 10010110111 转换为数值型源码
查看>>
课后作业-阅读任务-阅读提问-3
查看>>
JavaScript 是一种什么样的语言
查看>>
从零开始写一个Exporter
查看>>
windows10 下使用Pycharm2016 基于Anaconda3 Python3.6 安装Mysql驱动总结
查看>>
.net Thrift 之旅 (二) TServer
查看>>
redis info详解
查看>>
java定时任务调度工具
查看>>
[POI2004]GRA
查看>>
ES之各种运算符,for、while、do while 、switch case循环
查看>>
Twisted
查看>>
python-day34--进程补充
查看>>
POJ 1001 Exponentiation
查看>>
Redhat之package管理--学点 YUM和RPM
查看>>
使用Bochs调试Linux kernel 随笔 -- 准备
查看>>
Ajax 密码验证
查看>>
idea的项目结构
查看>>
stl pair
查看>>
python路径相关小问题
查看>>