劍指 Offer 49 醜數

2022-09-20 23:33:11 字數 545 閱讀 5602

劍指 offer 49. 醜數

多路歸併+dp,可以看出所有的醜數都是由質因數\(2\),\(3\),\(5\)乘上比它更小的醜數得到的,於是,現在假設有3個陣列,分別是:

a:b:

c:那麼所有醜數的排列,必定就是上面abc3個陣列的合併結果然後去重得到的,那麼這不就轉換成了三個有序陣列的無重複元素合併的問題了嗎?

而這三個陣列就剛好是乘以2,3,5得到的。

定義當前每個陣列的位置idx陣列,分別都先指向\(\),再進行多路歸併。

class solution ;

for(int i = 2; i <= n; i++)

while(dp[idx[1]] * 3 <= dp[i - 1])

while(dp[idx[2]] * 5 <= dp[i - 1])

dp[i] = math.min(dp[idx[0]] * 2, math.min(dp[idx[1]] * 3, dp[idx[2]] * 5));

}return dp[n];}}

劍指Offer 49 醜數

我們把只包含因子2 3和5的數稱為醜數。求按從小到大的順序的第1500個醜數。例 6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當作第乙個醜數。遍歷數字,對每個數字判斷是否只包含2 3 5因子。問題在於,有很多無用的計算,增加時間複雜度。時間複雜度 o n 空間複雜度 o 1 可以發現...

劍指offer49 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路 1.每次找出乙個最小丑數res i 都會產生三個新的醜數,2 res i 3 res i 5 res i 2.如果我...

劍指 Offer 49 醜數

我們把只包含質因子 2 3 和 5 的數稱作醜數 ugly number 求按從小到大的順序的第 n 個醜數。出看這道題可能感覺能算,但是思路就非常繁瑣。解法一 這個只說說思路,既然2,3,5是該數的因子,那麼該數除以2,3,5的餘數一定是 0 那麼就讓每個數連續除以2,3,5,只到餘數不為0 結果...