剑指offer49 丑数
我们把只包含因子2、3和5的数称作丑数(Ugly Number)。
例如6、8都是丑数,但14不是,因为它包含因子7。
求第n个丑数的值。
样例
输入:5
输出:5
注意:习惯上我们把1当做第一个丑数。
思路1:
用空间换时间的方法,按大小去寻找n个丑数并且用数组保存这n个丑数,而不是去依次去判断数是不是丑数。
AcWing-62 C++ code:
class Solution {
public:
int getUglyNumber(int n) {
if(n <= 1){
return n;
}
vector<int> uglyNumbers;
uglyNumbers.push_back(1);
n--;
int i = 0, j = 0, k = 0;
int number = 0;
while(n--)
{
number = min(min(uglyNumbers[i] * 2, uglyNumbers[j] * 3), uglyNumbers[k] * 5);
if(number == uglyNumbers[i] * 2){
i++;
}
if(number == uglyNumbers[j] * 3){
j++;
}
if(number == uglyNumbers[k] * 5){
k++;
}
uglyNumbers.push_back(number);
}
return uglyNumbers.back();
}
};
思路2:
 依次去判断数是不是丑数。(超时)
AcWing-62 C++ code:
class Solution {
public:
bool isUgly(int number){
while(number % 2 ==0){
number /= 2;
}
while(number % 3 == 0){
number /= 3;
}
while(number % 5 == 0){
number /= 5;
}
return (number == 1) ? true : false;
}
int getUglyNumber(int n) {
if(n <= 0){
return 0;
}
int number = 0;
while(n){
number++;
if(isUgly(number)){
n--;
}
}
return number;
}
};