劍指offer面試題49. 醜數

題目描述

我們把只包含因子 2、3 和 5 的數稱作醜數(Ugly Number)。求按從小到大的順序的第 n 個醜數。
在這裏插入圖片描述

思路

詳見鏈接

代碼

class Solution:
	def nthUglyNumber(self, n:int)->int:
		dp = [1]*n
		a, b, c = 0, 0, 0
		for 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 += 1
			if dp[i] == n3: b += 1
			if dp[i] == n5: c += 1
		return dp[-1]

複雜度

時間複雜度 O(N) : 其中 N = n,動態規劃需遍歷計算 dp列表。
空間複雜度 O(N) : 長度爲 N的 dp 列表使用 O(N)的額外空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章