劍指offer 醜數(找規律)

2021-09-13 12:13:07 字數 516 閱讀 2361

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

醜數的序列為 。每個醜數都是前面某乙個醜數乘上2/3/5的結果。所以新加入的醜數必然是從原有醜數中與2,3,5乘積中最小的值。

注意:分別設定與2,3,5對應的索引號,該索引對應的數字乘上該因子後的醜數剛好大於目前最大醜數。

每次要加入乙個新醜數:

(1)計算索引對應數與因子的乘積

(2)選擇乘積最小的,並將對應索引+1

這樣計算複雜度為o(n),並且每次只需要計算是醜數的數字;相比對所有整數去判斷是否為醜數,減少了計算量。

class

solution

;// 1為最小的醜數

for(

int i=

1; i< index;i++

)return num[index-1]

;}};

劍指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中的最小的乙個是下乙個醜數。...