leetcode 264: Ugly Number II
2016-08-09 10:54
260 查看
Write a program to find the
Ugly numbers are positive numbers whose prime factors only include
Note that
思路:
实际是一个分配2还是3还是5的问题;
求ans[i]时,遍历ans[i-1]至ans[1],
循环ans[j]*2,直到找到大于ans[i-1]且最小的值,
然后从当前位置开始,循环ans[k]*3,找最小值,
然后从当前位置同样处理ans[m]*5;
最后对三者求最小值,作为ans[i]。
注意:
用long long。
View Code
------------------------更新--------------------------
发现一个更好的算法:见:http://blog.csdn.net/ironyoung/article/details/49045933
相比于我上面的算法,不必从i-1到0一个一个去试2、3、5,
而是记录一下2、3、5下次开始考虑的起始位置,
以3为例,当前乘以3是最小值,下次就不会是在该位置再乘以3,而应往后考虑;
至于重复值,则过滤;
复杂度O(N*K)
n-th ugly number.
Ugly numbers are positive numbers whose prime factors only include
2, 3, 5. For example,
1, 2, 3, 4, 5, 6, 8, 9, 10, 12is the sequence of the first
10ugly numbers.
Note that
1is typically treated as an ugly number.
思路:
实际是一个分配2还是3还是5的问题;
求ans[i]时,遍历ans[i-1]至ans[1],
循环ans[j]*2,直到找到大于ans[i-1]且最小的值,
然后从当前位置开始,循环ans[k]*3,找最小值,
然后从当前位置同样处理ans[m]*5;
最后对三者求最小值,作为ans[i]。
注意:
用long long。
class Solution { public: int nthUglyNumber(int n) { vector<long long> ans(n+1,1); for(int i=2;i<=n;i++) { int j=i-1; long long tmp; for(;j>=1;j--) { if(ans[j]*2>ans[i-1]) tmp = ans[j]*2; else break; } long long tmp2 = tmp; for(;j>=1;j--) { if(ans[j]*3>ans[i-1]) tmp2 = ans[j]*3; else break; } long long tmp3 = tmp; for(;j>=1;j--) { if(ans[j]*5>ans[i-1]) tmp3 = ans[j]*5; else break; } ans[i] = min(min(tmp,tmp2),tmp3); } //for(int i=1;i<=n;i++) // cout<<ans[i]<<" "; return ans ; } };
View Code
------------------------更新--------------------------
发现一个更好的算法:见:http://blog.csdn.net/ironyoung/article/details/49045933
相比于我上面的算法,不必从i-1到0一个一个去试2、3、5,
而是记录一下2、3、5下次开始考虑的起始位置,
以3为例,当前乘以3是最小值,下次就不会是在该位置再乘以3,而应往后考虑;
至于重复值,则过滤;
复杂度O(N*K)
相关文章推荐
- LeetCode[264] Ugly Number II
- [leetcode-264]Ugly Number II(java)
- leetcode 264. Ugly Number II
- LeetCode 264 Ugly Number II
- LeetCode 264: Ugly Number II
- Leetcode 264(Ugly Number II)
- 264. Ugly Number II LeetCode
- Leetcode-264. Ugly Number II
- Leetcode 264. Ugly Number II
- LeetCode(263) Ugly Number (264)Ugly Number II
- <LeetCode OJ> Ugly Number / Ugly Number II【263 / 264】
- leetcode263_264:Ugly Number & Ugly Number II
- [LeetCode]264. Ugly Number II
- leetcode 264. Ugly Number II
- Leetcode练习 #264 Ugly Number II
- [LeetCode]264. Ugly Number II
- Leetcode 264(Ugly Number II)
- LeetCode264:Ugly Number II
- leetcode 264: Ugly Number II
- [理解leetcode解法]264. Ugly Number II