《劍指offer》面試題49 醜數

2021-09-09 09:03:58 字數 661 閱讀 1281

設計乙個演算法,找出只含素因子2,3,5 的第 n 小的數。符合條件的數如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12…

思路:思路1:從1開始遞增,依次判斷每個數是否是醜數,不夠高效;

思路2:思路1之所以效率低,比較關鍵的一點是遍歷的每乙個數字都進行醜數判斷。思路2不是去判斷醜數,而是計算出醜數:因為每個醜數都可以看成是由1去乘以2、3、5,再乘以2、3、5而衍生出來的。可以用三個指標指向第乙個醜數1,三個指標分別表示乘2,乘3,乘5,將三個指標計算出來的最小的醜數放在陣列中,並將該指標向後移動乙個位置。為了得到第1500個醜數,需要乙個長度1500的陣列來記錄已經計算出來的醜數。因此這個思路也可以說是用空間換時間。

public class getuglynumber_solution {

//思路一:判斷每個數是否是醜數

public static int getuglynumber(int num){

if(num<=0)

return 0;

int number = 0,uglyfound = 0;

while (uglyfound測試用例:

a.功能測試(輸入2,3,4,5,6等)。

b.特殊輸入測試(邊界值1;無效輸入0)。

c.效能測試(輸入較大的數字,如1500)。

參考:

劍指offer 面試題49 醜數

我們把只包含因子2 3 和 5 的數稱作醜數 ugly number 求按照從小到大的順序的第1500個醜數。例如,6 8都是醜數,但是14不是,因為它包含因子7。習慣上我們把1當做第乙個醜數。有空再補上 public class 49 uglynumber return uglynumbers i...

劍指offer 面試題49 醜數

面試題 劍指offer 題目解答 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。首先我們能想到的方法就是,迴圈遍歷,對每乙個數字進行判斷,如果是醜數那麼數量加一,直到等...

劍指offer 面試題49 醜數

題目描述 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。通俗易懂的解釋 首先從醜數的定義我們知道,乙個醜數的因子只有2,3,5,那麼醜數p 2 x 3 y 5 z,xy...