剑指offer49:丑数

题目描述

把只包含质因子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)  
        
发布了86 篇原创文章 · 获赞 1 · 访问量 8234

猜你喜欢

转载自blog.csdn.net/a1272899331/article/details/104470805
今日推荐