劍指offer49 醜數

2021-09-26 14:46:17 字數 633 閱讀 2604

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

/*思路:

1.每次找出乙個最小丑數res[i],都會產生三個新的醜數,2*res[i],3*res[i],5*res[i];

2.如果我們每次都把新的醜數和舊的醜數放在一起找出最小值,時間複雜度將會很大。實際上我們只需要在這些數中拿三個數出來進行比較.

這三個數分別是next2 = 2*res[i2] , next3 = 3*res[i3] , next5 = 5*res[i5]。他們代表的是 2,3,5乘以他們對應的最小

醜數。因為在所有2*res[i]的醜數中2*res[i2]是最小的,相應的另外兩個數也是同樣的道理,所以只需在這三個數中找出最小的,那就

是所有醜數中最小的。

*/public class solution

int res = new int[index];

int i2 = 0 , i3 = 0, i5 = 0;

res[0] = 1;

for(int i = 1; ireturn res[index-1];

}}

劍指Offer 49 醜數

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

劍指 Offer 49 醜數

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

劍指 Offer 49 醜數

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