题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路
类似斐波那契那道题的做法,都是由下往上去算。
- 不断地用前一个数分别去*2,*3,*5,生成新的最小丑数
- 再具体看是乘的哪个数生成的最小丑数,更新它的参数,生成下一个丑数
- 直到count等于给定的n值
# -*- coding:utf-8 -*-
class Solution:
def GetUglyNumber_Solution(self, index):
# write code here
if index<=0:
return 0
res=[1]
t2=t3=t5=0
count=1 #单纯地控制循环结束
while count<index:
num=min(res[t2]*2,res[t3]*3,res[t5]*5)
res.append(num)
#下面再乘一遍,是为了看上一次生成的最小值是乘的哪个,
#好往下继续走
if res[t2]*2==num:
t2+=1
if res[t3]*3==num:
t3+=1
if res[t5]*5==num:
t5+=1
count+=1
return res[count-1]
# 一般第几个,都从1开始,因为数组从0开始,所以要减1,找第n个
测试用例
if __name__=='__main__':
s=Solution()
print(s.GetUglyNumber_Solution(5))