劍指offer 醜數 Python 實現

2021-10-03 05:18:52 字數 987 閱讀 2131

【題目描述】

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

【解題思路】

按照醜數的大小乙個個的插入醜數,這樣可以以o(n)的時間複雜度實現。設定3個指標pos_2, pos_3, pos_5,分別指向要乘以2、3、5的位置。分別讓這三個指標位置的數字乘以2、3、5,將最小的結果加入到醜數序列中,如果是pos_2位置的數乘以2最小,證明插入的是pos_2位置的數乘以2,則pos_2往前移一位;如果是pos_3位置的數乘以3最小,證明插入的是pos_3位置的數乘以3,則pos_3往前移一位;如果是pos_5位置的數乘以5最小,證明插入的是pos_5位置的數乘以5,則pos_5往前移一位。用python實現的**如下:

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

class solution:

def getuglynumber_solution(self, index):

# write code here

if index == 0:

return 0

res = [1]

pos_2, pos_3, pos_5 = 0, 0, 0

for i in range(index):

insert_item = min(res[pos_2]*2, res[pos_3]*3, res[pos_5]*5)

if insert_item == res[pos_2] * 2:

pos_2 += 1

if insert_item == res[pos_3] * 3:

pos_3 += 1

if insert_item == res[pos_5] * 5:

pos_5 += 1

return res[index - 1]

python 醜數 劍指offer

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路 最直接的暴力解法是從1開始依次判斷數字是否為醜數,直到達到要求的醜數個數。當然這種方法肯定是會tle的,所以我們分析...

劍指offer 醜數 python

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

劍指offer 醜數 (Python)

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。題目鏈結 因為新增的大的醜數一定小的醜數乘以2,3,5得到的值最小的乙個。coding utf 8 class solut...