劍指offer 醜數

2022-05-26 06:18:09 字數 631 閱讀 1586

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

leetcode上也有這道題。不過是判斷乙個數是否為醜數。貌似是我第二道解出來的leetcode,印象還蠻深的。用了遞迴。

class

solution

};

但是這道題是給出第n個醜數。所以如果每個數都判斷是否為醜數,比較耗時。劍指offer裡看過又忘記了==|||

只記得用陣列,根據已經有的醜數去計算,具體的記不清楚了。

1是第乙個醜數,第二個醜數由1* 2/3/5中產生,其中最小的既是下乙個醜數。——2(接下來的醜數將包含兩個2的因子max2+1)

第二個醜數由2* 2/3/5還有上次的1*3/5中產生,最小的3既是下乙個醜數。——3(接下來的醜數將包含兩個3的因子max3+1)

陣列中第n個項既是第n個醜數。

class

solution

int getuglynumber_solution(int

index)

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