剑指offer--33.丑数

本来用数组做标志位,但是测试数据有第1500个,859963392,惹不起哦

---------------------------------------------------------------------------------------------------------------------

时间限制:1秒 空间限制:32768K 热度指数:238729
本题知识点:  数组

题目描述

把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
class Solution {
public:
    int GetUglyNumber_Solution(int n) {
        if(n < 7) return n;
        int ct = 0;
        unsigned long flag;
        priority_queue<unsigned long, vector<unsigned long>, greater<unsigned long>> Q;
        Q.push(1);
        while(ct < n-1) {
            unsigned long tmp = Q.top();Q.pop();
            if(tmp == flag) {
                continue;
            }else ct++;
            flag = tmp;
            Q.push(tmp*2),Q.push(tmp*3),Q.push(tmp*5); 
        }
        while(flag == Q.top())Q.pop();
        return Q.top();
    }
};

猜你喜欢

转载自www.cnblogs.com/evidd/p/10625404.html