劍指Offer 程式設計題33 醜數

2021-08-21 13:34:35 字數 943 閱讀 1644

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

牛客網:鏈結

leetcode:leetcode264:ugly number ii

所謂的乙個數m是另乙個數n的因子,是指n能被m整除,也就是n%m==0。根據醜數的定義,醜數只能被2、3和5整除。根據醜數的定義,醜數應該是另乙個醜數乘以2、3或者5的結果(1除外)。因此我們可以建立乙個陣列,裡面的數字是排好序的醜數,每乙個醜數都是前面的醜數乘以2、3或者5得到的。

這個思路的關鍵問題在於怎樣保證陣列裡面的醜數是排好序的。對乘以2而言,肯定存在某乙個醜數t2,排在它之前的每乙個醜數乘以2得到的結果都會小於已有最大的醜數,在它之後的每乙個醜數乘以乘以2得到的結果都會太大。我們只需要記下這個醜數的位置,同時每次生成新的醜數的時候,去更新這個t2。對乘以3和5而言,也存在著同樣的t3和t5。

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

class solution:

def getuglynumber_solution(self, index):

# write code here

if index < 7:

return index

res = [1,2,3,4,5,6]

t2, t3, t5 = [3,2,1]

for i in range(6, index):

while res[t2]*2 <= res[i]:

t2 += 1

while res[t3]*3 <= res[i]:

t3 += 1

while res[t5]*5 <= res[i]:

t5 += 1

return res[-1]

《劍指offer》33 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。c 實現 class solution return a index 1 python實現 coding utf 8 cl...

劍指offer 33 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。通俗易懂的解釋 首先從醜數的定義我們知道,乙個醜數的因子只有2,3,5,那麼醜數p 2 x 3 y 5 z,換句話說乙個醜...

劍指offer33 醜數

題目描述 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。這裡講解的很詳細了。coding utf 8 class solution def getuglynumber ...