劍指offer 12 醜數 python

2021-09-24 15:54:19 字數 1357 閱讀 4280

題目描述

把只包含質因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。

# -*- coding:utf-8 -*-

#劍指offer上的解法,這是借鑑的,我自己寫的時候,一直有乙個錯誤,

#就是我新增的醜數會有重複的情況,比如2*3和3*2都是6,這個6在我的列表中就出現了兩次。

#這個程式用while解決了該問題,使這個小於這個醜數的所有組合都不會發生

class solution:

def getuglynumber_solution(self, index):

if index < 1:

return 0

res = [1]

t2 = t3 = t5 = 0

nextidx = 1

while nextidx < index:

minnum = min(res[t2] * 2, res[t3] * 3, res[t5] * 5)

while res[t2] * 2 <= minnum:

t2 += 1

while res[t3] * 3 <= minnum:

t3 += 1

while res[t5] * 5 <= minnum:

t5 += 1

nextidx += 1

return res[nextidx - 1]

並且,下面是python大佬的幾種解決方法

1.

def getuglynumber_solution(self, index):

res=[2**i*3**j*5**k for i in range(30) for j in range(20) for k in range(15)]

res.sort()

return res[index-1] if index else 0

def getuglynumber_solution(self, index):

res=[2**i*3**j*5**k for i in range(30) for j in range(20) for k in range(15)]

return sorted(res)[index-1] if index else 0

return sorted([2**i*3**j*5**k  for i in range(30)  for j in range(20)   for k in range(15)])[index-1] if index else 0

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 參考程式設計師面試金典 偽 如下 1 初始化array和佇列 q2 q3 q5 2 將1插入array 3 分別將1 2...

劍指Offer 醜數

我們把只包含因子 2 3 和 5 的數稱作醜數 ugly number 求按從小 到大的順序的第 1500 個醜數。例如 6 8都是醜數,但 14 不是,它包含因子 7。習慣上我們把 1當做第乙個醜數。解法一 逐一判斷是否是醜數,簡單但是不夠高效 數字n是數字m的因子說明m n 0。醜數的因子只有2...

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 為了保證時間達到要求,可以將所求得的醜數都儲存在陣列中,然後再取出。前面的醜數乘以2 3或5中的最小的乙個是下乙個醜數。...