剑指offer 38.丑数

  1. 题目:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
  2. 思路:
    1. 把历史丑数都存下来,每次*2或者*3或者*5,找到最小的那个丑数
    2. 加到丑数结果集
    3. 复杂度是n*2
  3. 启发或者坑
    1. leetcode的测试例子比较多,res之前的元素类型是int,但是超出限制了,改成long long,leetcode点也过啦
  4. 代码
    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];
        }
    };
    
发布了131 篇原创文章 · 获赞 5 · 访问量 7388

猜你喜欢

转载自blog.csdn.net/Alexia23/article/details/103866812