劍指Offer系列49 醜數

2021-10-09 05:27:43 字數 794 閱讀 2630

我們把只包含質因子 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 結果...