思路:
首先给定一个解题基本思路:
假设为丑数,则可以认为 皆为丑数。
切下一丑数最小值一定为
依照上述定义可以使用动态规划进行题解。
编写一个程序判断给定的数是否为丑数。
丑数就是只包含质因数 2, 3, 5
的正整数。
示例 1:
输入: 6
输出: true
解释: 6 = 2 × 3
示例 2:
输入: 8
输出: true
解释: 8 = 2 × 2 × 2
示例 3:
输入: 14
输出: false
解释: 14 不是丑数,因为它包含了另外一个质因数 7。
说明:
说明:
1
是丑数。- 输入不会超过 32 位有符号整数的范围: [−231, 231 − 1]
代码:
class Solution:
def nthUglyNumber(self, n):
"""
:type n: int
:rtype: int
"""
primes = [2, 3, 5]
dp = [1]
lenPrimes = len(primes)
idxPrimes = [0] * lenPrimes
counter = 1
while counter < n:
min = pow(2, 32)
for i in range(0, lenPrimes):
temp = dp[idxPrimes[i]] * primes[i]
if temp < min:
min = temp
for i in range(0, lenPrimes):
if min == dp[idxPrimes[i]] * primes[i]:
idxPrimes[i] += 1
dp.append(min)
counter += 1
return dp[counter - 1]