面试题38:丑数
来源:互联网 发布:詹宁斯cba数据 编辑:程序博客网 时间:2024/06/05 17:43
题目:
我们把只包含因子2,3和5的数称作丑数。求按从小到大的顺序的第1500个丑数。例如6,8是丑数,14不是丑数。习惯上我们把1当作第一个丑数。
边界条件及异常:
index小于等于0。
思路:
下一个丑数肯定是前面某一个丑数uglyNumbers[mult2Index]乘以2,某一个丑数uglyNumbers[mult3Index]乘以3,某一个丑数uglyNumbers[mult5Index]乘以5的最小的值。
所以需要将前面的丑数全部存下来。
时间复杂度:O(n)
空间复杂度:O(n)
#include <iostream> #include <vector> #include <queue>#include <string> #include <stack> #include <algorithm> #include <hash_set> //for hashtable#include <hash_map>#include <set>#include <ctime>using namespace std;int MinOfThree(int num1, int num2, int num3){int m = min(num1, num2);return min(m, num3);}int GetUglyNumber(int index){if (index <= 0) return 0;vector<int> uglyNumbers(index);uglyNumbers[0] = 1;int nextIndex = 1;int mult2Index = 0, mult3Index = 0, mult5Index = 0;while (nextIndex < index){uglyNumbers[nextIndex] = MinOfThree(uglyNumbers[mult2Index] * 2, uglyNumbers[mult3Index] * 3, uglyNumbers[mult5Index] * 5);while (uglyNumbers[mult2Index] * 2 <= uglyNumbers[nextIndex])++mult2Index;while (uglyNumbers[mult3Index] * 3 <= uglyNumbers[nextIndex])++mult3Index;while (uglyNumbers[mult5Index] * 5 <= uglyNumbers[nextIndex])++mult5Index;++nextIndex;}return uglyNumbers[nextIndex - 1];}int main(){cout << GetUglyNumber(7) << endl;return 0;}
0 0
- 面试题38:丑数
- 面试题34:丑数
- 面试题43:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34 丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题 <丑数>(10)
- 面试题34:丑数
- 【面试题34】丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题 34: 丑数
- 面试题34. 丑数
- java环境配置
- 如何查看linux是32位还是64位
- MySQL 常用数据类型解析
- 版本号规范管理
- linux shell中的括号
- 面试题38:丑数
- TP:C43273D1
- Git Tag 的使用
- Spring学习4_DispatcherServlet详解
- Java的异常处理——try-catch-finally-throw-throws
- DIV如何圆角化,包括图片的DIV如何圆角化
- 微软程序员最好的时代来了
- 《Effective java》读书记录-第5条-避免创建不必要的对象
- 冒泡排序,选择排序,sort排序