264. Ugly Number II
来源:互联网 发布:为什么金九银十 知乎 编辑:程序博客网 时间:2024/06/05 18:15
1、题目描述
质因数只有2,3,5的正整数是丑数 ,返回第n个丑数(1 base)。
2、思路
方法1:有三个集合 v1,v2,v3分别保存含有2,3,5的;含有3,5的;只含有5丑数。
每次取三个集合的头元素的最小值,然后取了那个集合的元素,要及时地对其进行后续数字的补充。
找到第n个数字即可。
方法2:
a,b,c为三个计数变量。数组ans为丑数队列,丑数中的每一个元素,都可以分别乘以2,3,5来得到一个新的丑数,
但有可能会有重复,比如2*3与3*2都是6。
为了找下一个丑数,应先找出ans[a]*2,ans[b]*3,ans[c]*5的最小值,
这个最小值是从哪个地方产生的(可能不止一处),那么对应的计数变量要加1.
3、代码
方法1:
int nthUglyNumber(int n) { set<long>v1,v2,v3; v1.insert(2); v2.insert(3); v3.insert(5); long m=1; for(int i=1;i<n;i++){ long a = *(v1.begin()); long b = *(v2.begin()); long c = *(v3.begin()); m = min(a,min(b,c)); if(m==a){ v1.insert(m*2); v1.insert(m*3); v1.insert(m*5); v1.erase(v1.begin()); } else if(m==b){ v2.insert(m*3); v2.insert(m*5); v2.erase(v2.begin()); } else if(m==c){ v3.insert(m*5); v3.erase(v3.begin()); } } return m; }
方法2:
int nthUglyNumber(int n) { vector<int>ans; ans.push_back(1); int a=0,b=0,c=0; for(int i=1;i<n;i++){ int m = min(ans[a]*2,min(ans[b]*3,ans[c]*5)); ans.push_back(m); if(m==ans[a]*2) a++; if(m==ans[b]*3) b++; if(m==ans[c]*5) c++; } return ans[n-1]; }
阅读全文
0 0
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II**
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- HDU P2089 不要62
- 排序算法集合
- jQuery结合layerUI框架随机抽号网页版
- Scala中继承
- 20170705
- 264. Ugly Number II
- 一个6年的Java程序员,针对分布式锁的案例分析和总结
- hbase初识---hbase shell操作以及对应java API开发
- 3.java.io.IOException
- Hbase的shell操作
- 关于AttributeError:'numpy.ndarray' object has no attribute 'index'
- 静态与非静态的方法或变量使用场合简要说明
- MathType如何输入任意长度的空格
- Minimum supported Gradle version is 3.3. Current version is 2.14.1.Please fix the project's Gradle s