劍指offer 醜數

2021-08-28 03:00:20 字數 768 閱讀 2112

題目描述

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

/*在n為1時,輸出為1,n為2時輸出為2,設vec為n-1的醜數序列,則第n個醜數肯定

要大於vec裡的每個數,也就是前n-1個醜數序列裡的某個醜數乘以2,3,5裡面的某

乙個數得到的,因為他們的公式都是(2^x)*(

3^y)*(

5^z),

vec[n-1]=(2^k)*(

3^m)*(

5^p),所以是前n-1個醜數中的某乙個醜數乘以

2,3,5中的乙個得到,除以乙個大於1的數,肯定比它小,而且滿足

(2^x)*(

3^y)*(

5^z)醜數公式,必然是在前n-1個醜數序列中,

如果我用a2,b3,c5記錄下,a2代表前a2個數已經乘過2了(不含vec[a2]),也就是已經

存在於n-1的醜數序列中,b3也一樣代表前b3個數已經乘過3,c5則表示乘過5,

因為序列中a2之後的乘以2肯定比vec[a2]大,所以不用考慮,

同理,b3,c5之後的數也不用考慮,即比較,vec[a2]*2和vec[b3]*3及vec[c5]*5

的大小即可,挑出其中最小的,給n,同時某個記錄號加一*/

class solution

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