【題目描述】
把只包含質因子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...