题目描述
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
输入描述:
整数N
输出描述:
第N个丑数
1 N = int(input().strip()) 2 if N <= 6: 3 print(N) 4 else: 5 i2,i3,i5 = 0,0,0 6 dp = [0] * N 7 dp[0] = 1 8 for i in range(1,N): 9 n2 = dp[i2] * 2 10 n3 = dp[i3] * 3 11 n5 = dp[i5] * 5 12 dp[i] = min(min(n2,n3),n5) 13 if dp[i] == n2: 14 i2 += 1 15 if dp[i] == n3: 16 i3 += 1 17 if dp[i] == n5: 18 i5 += 1 19 print(dp[N-1])
同剑指Offer第49题,动态规划。(注意:1也是丑数)