求第n个丑数
来源:互联网 发布:移动数据打开要收费吗 编辑:程序博客网 时间:2024/04/29 17:10
丑数
设计一个算法,找出只含素因子3
,5
,7
的第 k 大的数。
符合条件的数如:3,5,7,9,15......
如果k=4
, 返回 9
要求时间复杂度为O(nlogn)或者O(n)
---------------------------------------------------------------------------------------------------------------------------------------------------------------
解题思路:
如果一个数是丑数,它只能被3或者5或者7整除。因此第k个丑数一定等于3或者5或者7乘以第k个之前的丑数。
求第k个丑数,我们可以从第一个开始求起。默认第一个丑数是1;
第二个丑数:3*1 5*1 7*1中的最小者:3
第三个丑数:3*3(注意3乘以的丑数向后移位一个),5*1,7*1中的最小者:5
第四个丑数:3*3,5*3(后移了一位),7*1中的最小者:7
第五个丑数:3*3,5*3,7*3(后移一位)中的最小者:9
第六个丑数:3*5(后移一位),5*3,7*3中的最小者:15
第七个丑数:3*7(后移一位),5*5(后移一位),7*3中的最小者:21 此时3和5都向后移动。
---------------------------------------------------------------------------------------------------------------------------------------------
算法实现:
long long kthPrimeNumber(int k) { long long num[k+1]; int p3,p5,p7; p3=p5=p7=0; num[0]=1; for(int i=1;i<=k;i++) { num[i]=min(min(num[p3]*3,num[p5]*5),min(num[p3]*3,num[p7]*7)); if(num[i]==num[p3]*3) ++p3; if(num[i]==num[p5]*5) ++p5; if(num[i]==num[p7]*7) ++p7; } return num[k];}
- 求第n个丑数
- 求第n个丑数
- 剑指off-求第n个丑数
- C++求第N个丑数的值
- 笔试题:求第n个丑数
- 达内课程-求第n个丑数
- 求第n个斐波拉契数
- 求第n项和
- 求第n个素数
- Ugly Number II(求第N个丑数)
- 剑指offer面试题之求第n个丑数
- Ugly Number II(求第N个丑数)
- 剑指offer面试题之求第n个丑数
- 20170910算法工程师在线笔试之求第n个丑数
- 求第n个Fibonacci数
- 递归-求第N项的值
- 求n个数的第K小数
- N个数,求第K大数
- ASCII字符集
- HDU 2062 Subset sequence
- 高并发处理-初步了解(一)
- "c:\Program Files\7-Zip\7z.exe" a "%%X.7z" "%%X\"
- 设置应用程序图标
- 求第n个丑数
- ajax实现带进度条的文件上传
- C++14新特性
- zookeeper实现原理
- SRM 664 Div2 Hard: BearSortsDiv2(归并排序)
- collectionView学习
- Java参数传递方式
- 数据发布与订阅
- C语言系列--时间处理