剑指 Offer 49. 丑数
题目:我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。 中等
方法:动态规划 时间复杂度O(n) 空间复杂度O(n)
根据丑数的性质,目标丑数 = 某个小丑数 * 2/3/5
采用动态规划,对于丑数数组,每个数都需要乘2/3/5,故设定三个指针,分别代表每个丑数乘以2、3、5,当当前丑数等于另一个丑数乘以2/3/5后,指针+1
def nthUglyNumber(n): """ :type n: int :rtype: int """ dp,a,b,c = [1]*n,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]

浙公网安备 33010602011771号