醜數

題目描述

把只包含因子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;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章