NO-33、丑数
题目描述:
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
输入:
7
输出:
8
第七个丑数 1 2 3 4 5 6 8
解法一:
//超出时间复杂度-->方便理解
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_Solution(int index) {
if(index<=0)
return 0;
int number=0;
int uglyFound=0;
while(uglyFound<index){
++number;
if(IsUgly(number)){
++uglyFound;
}
}
return number;
}
};
解法二:三指针
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index < 7)return index;
vector<int>result(index,0);
result[0]=1;
int indexTwo=0,indexThree=0,indexFive=0;
for(int i=1;i<index;++i){
int minNum=min(min(result[indexTwo]*2,result[indexThree]*3),result[indexFive]*5);//只要返回一个数字,只要返回交集即可
if(minNum==result[indexTwo]*2) indexTwo++;//分别取三的倍数
if(minNum==result[indexThree]*3) indexThree++;//3的倍数
if(minNum==result[indexFive]*5) indexFive++;//5的倍数
result[i]=minNum;
}
return result[index-1];
}
};