1 直观版
int GetUglyNumber_Solution(int index) {
if(index<=0)
return 0;
int number=0;
while(index>0){
number++;
if(isUglyNumber(number)){
index--;
}
}
return number;
}
bool isUglyNumber(int num){
while(num%2==0)
num=num/2;
while(num%3==0)
num=num/3;
while(num%5==0)
num=num/5;
if(num==1)
return true;
return false;
}
2 用空间换时间,既把找到的丑数存起来下一个丑数就是前面的丑数*2,*3 ,*5 最小的那个。
int GetUglyNumber_Solution(int index) {
vector<int> uglyNum;
uglyNum.push_back(1);
int ugly2=0;
int ugly3=0;
int ugly5=0;
int nextNum=1;
while(nextNum<index){
int minNum=Min(uglyNum[ugly2]*2,uglyNum[ugly3]*3,uglyNum[ugly5]*5);
uglyNum.push_back(minNum);
while(uglyNum[ugly2]*2<=minNum)
ugly2++;
while(uglyNum[ugly3]*3<=minNum)
ugly3++;
while(uglyNum[ugly5]*5<=minNum)
ugly5++;
nextNum++;
}
return uglyNum[index-1];
}
int Min(int num1,int num2,int num3){
int minNum=num1<num2?num1:num2;
minNum=minNum<num3?minNum:num3;
return minNum;
}