剑指offer--33.丑数

Posted evidd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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();
    }
};

 

以上是关于剑指offer--33.丑数的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer--33.丑数

《剑指Offer——丑数,n个骰子的点数》代码

《剑指offer》---丑数

剑指offer-丑数

剑指Offer——丑数

剑指offer丑数