劍指 面試題49 醜數

2021-10-23 06:02:12 字數 1311 閱讀 8457

題目

我們把只包含因子 2、3 和 5 的數稱作醜數(ugly number)。求按從小到大的順序的第 n 個醜數。

1 是醜數。

n 不超過1690

思路 以空間換時間

(1)開闢乙個陣列存放前面已經排好序的醜數

(2)設定三個位置變數p2、p3、p5表示上一次乘以2、3、5的位置,比如在p2之前的數乘以2都小於當前陣列中的最大值,在這個數之後乘以2都大於最大值。

(3)每次新的醜數都是p2對應的值×2p3對應值×3p5對應值×5三者中最小的,最後取的哪乙個就更新哪個下標。

c++

class

solution);

// c11之後

if(res[i]

==res[t2]*2

)++t2;

if(res[i]

==res[t3]*3

)++t3;

if(res[i]

==res[t5]*5

)++t5;

}return res[n-1]

;}};

python

class

solution

:def

nthuglynumber

(self, n:

int)

->

int:

if n<7:

return n

res =[1

]*np2 , p3, p5 =0,

0,0for i in

range(1

, n)

: res[i]

=min

(res[p2]*2

,min

(res[p3]*3

, res[p5]*5

))if res[i]

==res[p2]*2

: p2 +=

1if res[i]

==res[p3]*3

: p3 +=

1if res[i]

==res[p5]*5

: p5 +=

1return res[n-

1]

劍指offer 面試題49 醜數

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

《劍指offer》面試題49 醜數

設計乙個演算法,找出只含素因子2,3,5 的第 n 小的數。符合條件的數如 1,2,3,4,5,6,8,9,10,12 思路 思路1 從1開始遞增,依次判斷每個數是否是醜數,不夠高效 思路2 思路1之所以效率低,比較關鍵的一點是遍歷的每乙個數字都進行醜數判斷。思路2不是去判斷醜數,而是計算出醜數 因...

劍指offer 面試題49 醜數

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