劍指offer 18 醜數

2021-07-25 22:00:35 字數 686 閱讀 5520

題目:把只包含因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。

直觀的想法:從1開始乙個個判斷數字是否為醜數,遇見醜數就記錄下來,直到找到低n個為止,不過這樣計算複雜度太大。

class

solution

uglynum++;

}return uglynum;

}bool isuglynumber(int number)

};

書中介紹了一種較為高效的解法:

既然要求的醜數最簡因子為2,3,5的倍數,先將基數1分別乘以2,3,5,從中找出最小的數,這個數就是下乙個醜數。用pmultiply2,pmultiply3和pmultiply5三個指標分別指向小於這個醜數除以2,3,5後的數,不斷迴圈,直到找到滿足n的值為止。詳細的分析過程可閱讀相關章節。

class solution 

int ugly = puglynumbers[nextuglyindex - 1];

delete puglynumbers;

return ugly;

}int min(int number1,int number2,int number3)

};

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 參考程式設計師面試金典 偽 如下 1 初始化array和佇列 q2 q3 q5 2 將1插入array 3 分別將1 2...

劍指Offer 醜數

我們把只包含因子 2 3 和 5 的數稱作醜數 ugly number 求按從小 到大的順序的第 1500 個醜數。例如 6 8都是醜數,但 14 不是,它包含因子 7。習慣上我們把 1當做第乙個醜數。解法一 逐一判斷是否是醜數,簡單但是不夠高效 數字n是數字m的因子說明m n 0。醜數的因子只有2...

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 為了保證時間達到要求,可以將所求得的醜數都儲存在陣列中,然後再取出。前面的醜數乘以2 3或5中的最小的乙個是下乙個醜數。...