校招真题练习036 寻找丑数(滴滴)

寻找丑数

题目描述
把只包含因子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也是丑数)

原文地址:https://www.cnblogs.com/asenyang/p/11921259.html