把只包含質因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。
演算法:
# -
*- coding:utf-8-
*-class solution:
def getuglynumber_solution
(self, index)
:# write code here
if index ==0:
return
0 uglylist =[1
] p2 = p3 = p5 =
0for i in range(1
,index)
: lastmax = uglylist[i-1]
while
(lastmax >= uglylist[p2]*2
):p2 +=1
while
(lastmax >= uglylist[p3]*3
):p3 +=1
while
(lastmax >= uglylist[p5]*5
):p5 +=1
uglylist.
(min
(uglylist[p2]*2
, uglylist[p3]*3
, uglylist[p5]*5
))return uglylist[-1
]
**二:
# -
*- coding:utf-8-
*-class solution:
def getuglynumber_solution
(self, index)
:# write code here
if index ==0:
return
0 baselist =[1
] min2 = min3 = min5 =
0 curnum =
1while curnum < index:
minnum =
min(baselist[min2]*2
,baselist[min3]*3
,baselist[min5]*5
) baselist.
(minnum)
while baselist[min2]*2
<= minnum:
min2 +=1
while baselist[min3]*3
<= minnum:
min3 +=1
while baselist[min5]*5
<= minnum:
min5 +=1
curnum +=1
return baselist[-1
]
劍指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中的最小的乙個是下乙個醜數。...