方法一:暴力解法
解题思路:
直接从整数1开始,不断递增,判断该数字是否为丑数(专门写一个判断是否为丑数的函数),当遇到一个丑数,则计数值加1,直至遇到n个丑数为止。
当n很大时,这种暴力解法会遇到 超出时间限制的问题,代码如下:
class Solution {
public:
int nthUglyNumber(int n) {
int i = 1;
int num = 0;
while(num < n){
bool tmp = whetherUgly(i);
if(tmp) num++;
i++;
}
return i-1;
}
//判断是否为丑数的函数
bool whetherUgly(int num){
if(num == 0) return false;
while(num % 5 == 0) num = num / 5;
while(num % 3 == 0) num = num / 3;
while(num % 2 == 0) num = num / 2;
if(num == 1) return true;
else return false;
}
};
方法二:最小堆解法
<