- 题目:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
- 思路:
- 把历史丑数都存下来,每次*2或者*3或者*5,找到最小的那个丑数
- 加到丑数结果集
- 复杂度是n*2
- 启发或者坑
- leetcode的测试例子比较多,res之前的元素类型是int,但是超出限制了,改成long long,leetcode点也过啦
- 代码
class Solution { public: vector<long long> res; int GetUglyNumber_Solution(int index) { if (index == 0) return 0; res.push_back(1); int minUglyNumber; vector<int> factors; factors.push_back(2); factors.push_back(3); factors.push_back(5); while(index > 1) { minUglyNumber = -1; for (int i = 0; i < res.size(); i++) { for (int j = 0; j < factors.size(); j++) { if (res[i]*factors[j] <= res[res.size()-1]) continue; if (minUglyNumber == -1 || res[i]*factors[j] < minUglyNumber) minUglyNumber = res[i]*factors[j]; } } res.push_back(minUglyNumber); /*for (int i = 0; i < res.size(); i++) cout << res[i] << " "; cout << endl; while (res.size() > 9) { res.erase(res.begin(),res.begin()+1); }*/ index--; } return res[res.size()-1]; } };
剑指offer 38.丑数
猜你喜欢
转载自blog.csdn.net/Alexia23/article/details/103866812
今日推荐
周排行