题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
方法一:简单粗暴,分解每一个数,看他的因数是不是只有2,3,5。
import math
class Solution:
def GetUglyNumber_Solution(self, index):
# write code here
res = []
res.append(1)
i=2
while True:
temp = i
while temp%2==0:
temp = temp//2
while temp%3==0:
temp = temp//3
while temp%5==0:
temp = temp//5
if temp==1:
res.append(i)
if len(res)>index:
break
i = i+1
return res[index-1]
方法二:我们定义三个变量来当下标,记录*2,*3,*5这个三个方式,然后再使用min函数,求出来最小的丑数添加到列表中
# -*- coding:utf-8 -*-
import math
class Solution:
def GetUglyNumber_Solution(self, index):
# write code here
if index<1:
return index
res = [1]
x,y,z = 0,0,0
for i in range(index-1):
while 2*res[x]<=res[-1]:
x = x+1
while 3*res[y]<=res[-1]:
y = y+1
while 5*res[z]<=res[-1]:
z = z+1
res.append(min(2*res[x],3*res[y],5*res[z]))
return res[-1]