Write a program to find the n
-th ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12
is the sequence of the first 10
ugly numbers.
Note that 1
is typically treated as an ugly number, and n does not exceed 1690.
题意:在上一题Ugly Number的基础上,返回第n个丑数;动态规划是解决本题的有效途径。
1、声明一个dp列表保存数据;
2、声明t1、t2、t3作为下标指向;
3、利用min(dp[t1]*2, dp[t2] * 3, dp[t3]* 5)求出最小值,并更新下标
class Solution(object):
def nthUglyNumber(self, n):
"""
:type n: int
:rtype: int
"""
if n == 1:
return 1
dp = [0, 1]
index = 2
#可以看作是三个指针,滑动数组
t1 = 1
t2 = 1
t3 = 1
for i in range(2, n + 1):
temp = min(dp[t1]*2, dp[t2]*3, dp[t3]*5)
if temp == dp[t1]*2:
t1 += 1
if temp == dp[t2]*3:
t2 += 1
if temp == dp[t3]*5:
t3 += 1
dp.append(temp)
return dp[-1]