題目思路 以空間換時間我們把只包含因子 2、3 和 5 的數稱作醜數(ugly number)。求按從小到大的順序的第 n 個醜數。
1 是醜數。
n 不超過1690
(1)開闢乙個陣列存放前面已經排好序的醜數
(2)設定三個位置變數p2、p3、p5表示上一次乘以2、3、5的位置,比如在p2之前的數乘以2都小於當前陣列中的最大值,在這個數之後乘以2都大於最大值。
(3)每次新的醜數都是p2對應的值×2、p3對應值×3、p5對應值×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個醜數。首先我們能想到的方法就是,迴圈遍歷,對每乙個數字進行判斷,如果是醜數那麼數量加一,直到等...