剑指Offer——(33)丑数
来源:互联网 发布:汉仪综艺简体 mac版本 编辑:程序博客网 时间:2024/09/21 11:22
题目描述:
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
实现如下:
//不用每一个数字都进行判断//而将丑数进行有序的排列,存储到set中//根据定义,丑数乘以2或3或5后,还是丑数//所以初始化第一个丑数1//由三种倍数关系计算出第一个大于当前最大丑数的丑数//将此丑数插入//这三个因数由三个迭代器表示,为第一个乘以倍数后大于当前最大丑数的丑数//这样可以减少重复计算比较小的丑数class Solution {public: int minNumber(int num1, int num2, int num3)//判断哪一个丑数最小 { int min = num1 < num2 ? num1 : num2; return min < num3 ? min : num3; } int GetUglyNumber_Solution(int index) { if (index <= 0) return 0;//防御性动作 set<int> se; se.insert(1);//初始化第一个丑数1 //三个迭代器表示不同倍数关系的 set<int>::iterator it2 = se.begin(); set<int>::iterator it3 = se.begin(); set<int>::iterator it5 = se.begin(); set<int>::iterator itTmp; while (index > se.size())//判断是否为第index个丑数 { //计算出当前最大丑数的下一个丑数 int min = minNumber(*it2 * 2, *it3 * 3, *it5 * 5); se.insert(min);//插入min itTmp = --se.end(); //将三个迭代器更新到相应位置 while (*it2 * 2 <= *itTmp) ++it2; while (*it3 * 3 <= *itTmp) ++it3; while (*it5 * 5 <= *itTmp) ++it5; } return *(--se.end());//返回第index个丑数的值 }};
阅读全文
0 0
- 剑指Offer—33—丑数
- 剑指offer—丑数
- 剑指offer—丑数
- 剑指Offer——(33)丑数
- 剑指offer ——寻找丑数
- 《剑指offer》——丑数
- 剑指offer——丑数
- 剑指Offer——丑数
- 剑指offer——丑数
- 剑指Offer——丑数
- 剑指offer——丑数
- 剑指offer——丑数
- 剑指offer——33.丑数
- 剑指offer 33 丑数
- 剑指offer——丑数(好题,思路)
- 丑数(剑指offer)
- 【剑指offer】丑数
- 剑指offer-丑数
- Nginx nginx.conf 配置详解
- Android:Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败
- HTML 2017.07.18
- 延迟初始化错误: org.hibernate.LazyInitializationException: could not initialize proxy
- 第15讲 mysql积累
- 剑指Offer——(33)丑数
- Zookeeper和zkui介绍以及部署
- 如何提高代码的执行效率--c++
- LeetCode刷题【Array】 Shortest Unsorted Continuous Subarray
- caffe——python接口:生成deploy文件
- 百练_2690:首字母大写
- for in循环i的数据类型
- 欢迎使用CSDN-markdown编辑器
- Hadoop NameNode 高可用 (High Availability) 实现解析