题解 | #数字在升序数组中出现的次数#
丑数
http://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b
思路:p2、p3、p5分别记录基于2、3、5生成丑数的位置
注意:注意指针移动
class Solution:
def GetUglyNumber_Solution(self , index: int) -> int:
# write code here
if index == 0:
return 0
dp = [0] * (index)
dp[0] = 1
p2, p3, p5 = 0, 0, 0 # 乘以2、3、5当前可生成最小丑数的位置
for i in range(1, index):
dp[i] = min(dp[p2]*2, min(dp[p3]*3, dp[p5]*5))
if dp[p2] * 2 == dp[i]: # 当前由基于2生成最小丑数,p2移动
p2 += 1
if dp[p3] * 3 == dp[i]:
p3 += 1
if dp[p5] * 5 == dp[i]:
p5 += 1
return dp[index-1]