題目描述
把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因爲它包含因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。
方法一、逐個判斷
class Solution {
public:
bool isUglyNumber(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 ugly=0;
while(ugly<index)
{
number++;
if(isUglyNumber(number))
ugly++;
}
return number;
}
};
2、以空間換時間
class Solution {
public:
int Min(int x,int y,int z)
{
return min(min(x,y),z);
}
int GetUglyNumber_Solution(int index) {
if(index<=0)
return 0;
int *pUglyNum=new int[index];
pUglyNum[0]=1;
int nextUglyIndex=1;
int *pMul2=pUglyNum;
int *pMul3=pUglyNum;
int *pMul5=pUglyNum;
while(nextUglyIndex<index)
{
int min=Min(*pMul2*2,*pMul3*3,*pMul5*5);
pUglyNum[nextUglyIndex]=min;
while(*pMul2*2<= pUglyNum[nextUglyIndex])
pMul2++;
while(*pMul3*3<= pUglyNum[nextUglyIndex])
pMul3++;
while(*pMul5*5<= pUglyNum[nextUglyIndex])
pMul5++;
nextUglyIndex++;
}
int ugly=pUglyNum[nextUglyIndex-1];
delete[] pUglyNum;
return ugly;
}
};