33、丑數

題目描述
把只包含因子2、3和5的數稱作丑數(Ugly Number)。例如6、8都是丑數,但14不是,因為它包含因子7。 習慣上我們把1當做是第一個丑數。求按從小到大的順序的第N個丑數。

class Solution {
public:
    int GetUglyNumber_Solution(int index) {
        if(index<=0)
            return 0;
        vector<int> rec(index,1);
        int p2=0,p3=0,p5=0,i=1;
        
        while(i<index)
        {
            rec[i] = min(rec[p2]*2,min(rec[p3]*3,rec[p5]*5)); //將丑書依次排序
            while(rec[p2]*2<=rec[i])   //將丑數排序,找到離rec[i]最近的前一個,然后再把p2+1,最后判斷和比較的時候就可以得到相對較小的那一個
                p2++;
            while(rec[p3]*3<=rec[i])
                p3++;
            while(rec[p5]*5<=rec[i])
                p5++;
            i++;
        }
        return rec[index-1];
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容