剑指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(); } };