题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
#方法1:暴力直观方法
def isugly(number):
while number%2==0:
number/=2
while number%3==0:
number/=3
while number%5==0:
number/=5
return True if number==1 else False
# number=7
# isugly(number)
# def uglynumber(n,m=10):
# count=0
# while n:
# if isugly(n):
# count += 1
# if count ==m :
# return n
# n += 1
# return False
def uglynumber(n):#n=1500
if n<=0:
return 0
number=0
count=0
while count < n:
number+=1
if isugly(number):
count+=1
return number
uglynumber(9)
方法2:创建结果数组,用空间换时间
#方法2:创建结果数组,用空间换时间
def uglynumber(n):#n=1500
if n<=0:
return 0
ans=[1]
i2,i3,i5=0,0,0
i=1
while len(ans)<n:
ans.append(min(ans[i2]*2,min(ans[i3]*3,ans[i5]*5)))
if ans[i]==ans[i2]*2:
i2+=1
if ans[i]==ans[i3]*3:
i3+=1
if ans[i]==ans[i5]*5:
i5+=1
i+=1
print(ans)
return ans.pop()
uglynumber(9)