我們把只包含質因子 2、3 和 5 的數稱作醜數(ugly number)。求按從小到大的順序的第 n 個醜數。
示例:輸入: n = 10
輸出: 12
解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個醜數。
說明:1 是醜數。
n 不超過1690。
python
# 思路:
# 採用動態規劃求解,dp[i]為第i+1個醜數、
# 複雜度:
# o(n)
class
solution
:def
nthuglynumber
(self, n:
int)
->
int:
dp,a,b,c=[1
]*n,0,
0,0for i in
range(1
,n):
n2,n3,n5=dp[a]*2
,dp[b]*3
,dp[c]*5
dp[i]
=min
(n2,n3,n5)
if dp[i]
==n2: a+=
1if dp[i]
==n3: b+=
1if dp[i]
==n5: c+=
1return dp[-1
]
c++class
solution
return dp[n-1]
;}};
劍指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 結果...