Ugly Number II
2016-03-30 16:54
281 查看
Write a program to find the 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, 12 is the sequence of the first 10 ugly numbers.
Note that 1 is typically treated as an ugly number.
Hint:
The naive approach is to call isUgly for every number until you reach the nth one. Most numbers are not ugly. Try to focus your effort on generating only the ugly ones.
An ugly number must be multiplied by either 2, 3, or 5 from a smaller ugly number.
The key is how to maintain the order of the ugly numbers. Try a similar approach of merging from three sorted lists: L1, L2, and L3.
Assume you have Uk, the kth ugly number. Then Uk+1 must be Min(L1 * 2, L2 * 3, L3 * 5).
解:
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first 10 ugly numbers.
Note that 1 is typically treated as an ugly number.
Hint:
The naive approach is to call isUgly for every number until you reach the nth one. Most numbers are not ugly. Try to focus your effort on generating only the ugly ones.
An ugly number must be multiplied by either 2, 3, or 5 from a smaller ugly number.
The key is how to maintain the order of the ugly numbers. Try a similar approach of merging from three sorted lists: L1, L2, and L3.
Assume you have Uk, the kth ugly number. Then Uk+1 must be Min(L1 * 2, L2 * 3, L3 * 5).
解:
class Solution { public: int nthUglyNumber(int n) { int count=1; int ug=1; vector<int> nums={1}; int p2=0; int p3=0; int p5=0; for(;count<n;++count) { ug=min(nums[p2]*2,nums[p3]*3); ug=min(ug,nums[p5]*5); nums.push_back(ug); if(ug==nums[p2]*2)++p2; if(ug==nums[p3]*3)++p3; if(ug==nums[p5]*5)++p5; } return nums.back(); }
相关文章推荐
- 微软研发制胜策略读书笔记
- Oracle学习(八)----sql语言
- 最小生成树算法—Prim和克鲁斯卡尔
- SpannableString与SpannableStringBuilder使用【原创】
- 使用scrollpagination实现页面底端自动加载无需翻页功能
- 计算数据库中各个表的数据量和每行记录所占用空间
- jsp站点
- HDOJ 2665 Kth number(归并树)
- 实时系统概念
- POJ 1185 状态压缩DP
- Android使用Face++架构包实现人脸识别
- 伪静态规则写法RewriteRule-htaccess详细语法使用
- DBCP连接池原理分析(转载)
- (深入理解计算机系统) 实时系统
- javaweb学习总结(二十六)——jsp简单标签标签库开发(二)
- UVa1585 Score
- ava method "org.apache.struts2.components.Form.getValidators(String)" threw an exception when invoke
- iOS 百度地图定位与反地理编码
- localhost与127.0.0.1的区别
- 遇到的问题