刷題 醜數 python

2021-10-20 16:32:54 字數 2059 閱讀 9158

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

思路:所有醜數可以通過前面的醜數乘2、3、5得到,主要是要知道如何將這些數從小到大排序,以確定排在第n個位置的醜數。

假設醜數序列是x0,

x1,x

2…xn

x_, x_, x_ … x_

x0​,x1

​,x2

​…xn

​, 那麼下乙個醜數一定是min

(xi∗

2,xj

∗3,x

k∗5)

min(x_*2, x_*3, x_*5)

min(xi

​∗2,

xj​∗

3,xk

​∗5)

,那麼i,j

,k

i, j, k

i,j,

k如何求解呢?

醜數序列的最開始x0=

1x_=1

x0​=1,i,j

,k

i, j, k

i,j,

k均等於0, min

(xi∗

2,xj

∗3,x

k∗5)

=min

(2,3

,5)=

2min(x_*2, x_*3, x_*5) = min(2, 3, 5) = 2

min(xi

​∗2,

xj​∗

3,xk

​∗5)

=min

(2,3

,5)=

2因此i向右移一位,j、k不變,即

i +=

1i+=1

i+=1

醜數序列變為,

m in

(xi∗

2,xj

∗3,x

k∗5)

=min

(4,3

,5)=

3min(x_*2, x_*3, x_*5) = min(4, 3, 5) = 3

min(xi

​∗2,

xj​∗

3,xk

​∗5)

=min

(4,3

,5)=

3j向右移一位,i、k不變,醜數序列變為,

m in

(xi∗

2,xj

∗3,x

k∗5)

=min

(4,6

,5)=

4min(x_*2, x_*3, x_*5) = min(4, 6, 5) = 4

min(xi

​∗2,

xj​∗

3,xk

​∗5)

=min

(4,6

,5)=

4i向右移一位,j、k不變,醜數序列變為, 如此重複即可得到第n個醜數。

code:

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

class solution:

def getuglynumber_solution(self, index):

# write code here

if index == 0:

return 0

result = [1]

index2 = 0

index3 = 0

index5 = 0

for i in range(1, index):

# print(result)

next_chou = min(result[index2]*2, result[index3]*3, result[index5]*5)

if next_chou%2==0:

index2 += 1

if next_chou%3==0:

index3 += 1

if next_chou%5==0:

index5 += 1

return result[-1]

LeetCode刷題 醜數

編寫乙個程式判斷給定的數是否為醜數。醜數就是只包含質因數 2,3,5 的正整數。示例 1 輸入 6 輸出 true 解釋 6 2 3 示例 2 輸入 8 輸出 true 解釋 8 2 2 2 示例 3 輸入 14 輸出 false 解釋 14 不是醜數,因為它包含了另外乙個質因數 7。說明 1 是醜...

LeetCode刷題 醜數

編寫乙個程式判斷給定的數是否為醜數。醜數就是只包含質因數 2,3,5 的正整數。示例 1 輸入 6 輸出 true 解釋 6 2 3 示例 2 輸入 8 輸出 true 解釋 8 2 2 2 示例 3 輸入 14 輸出 false 解釋 14 不是醜數,因為它包含了另外乙個質因數 7。說明 1 是醜...

刷題 醜數提取及醜數判斷

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。根據醜數的定義,我們知道醜數一定是由2 3 5乘積得到,可表示成如下公式 我們預設1是第乙個醜數,初始醜數序列為1,從1開...