劍指 Offer 49 醜數

2021-10-17 19:22:11 字數 1209 閱讀 2828

每個醜數都等於它前面離它最遠的醜數(且還沒被乘過2、3、5)通過乘2或者3或者5得到的最小值。因此主要的任務就是找到離他最遠的還沒被乘過2的數,離他最遠的還沒被乘過3的數,離他最遠的還沒被乘過5的數,將這些數乘2,3,5,比較大小,取最小值為當前的醜數。用a,b,c作為截止目前為止最遠的還沒被乘過2,3,5的下標。

如圖所示:

計算 min(1 * 2,1 * 3,1 * 5),於是下乙個數為 2,a + 1 (代表截止到目前為止還沒被乘過 2的數的下標)。

計算 min(2 * 2,1 * 3,1 * 5),於是下乙個數為 3,b + 1 (代表截止到目前為止還沒被乘過 3的數的下標)。

計算 min(2 * 2, 2 * 3, 1 * 5),於是下乙個數為 4,a + 1 (代表截止到目前為止還沒被乘過 2的數的下標)。

計算 min(3 * 2, 2 * 3,1 * 5),於是下乙個數為 5,c + 1 (代表截止到目前為止還沒被乘過 5的數的下標)。

以此類推,不會錯過每乙個醜數。注意:當bp[a] * 2,bp[b] * 3, bp[c] * 5得數相等時,a,b,c都要加一。

劍指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 結果...