leetcode 264 醜數2的最小堆解法

2021-10-02 21:51:03 字數 1160 閱讀 4473

編寫乙個程式,找出第 n 個醜數。

醜數就是只包含質因數 2, 3, 5 的正整數。

示例:

輸入: n = 10

輸出: 12

解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個醜數

最小堆的方式思考方式,之前自己有點繞不過來,不知道該怎麼解。也不理解為什麼會用到堆,和為什麼會用到最小堆來解決問題。下面分別解釋這兩個問題。其實也是乙個問題。

思考問題的時候,對於求top幾的問題,都很容易想到應用堆來解決,但是為什麼這個題目會用到堆呢?只是要轉換一下思路,對於求第幾個的這種問題,如果能考慮到將資料都比較歸一化的放到統一的資料結構裡面,那麼就可以用相應的資料結構解決問題。

可以這麼思考,我們維護乙個由醜數組成的堆,這個堆新增的資料是**來的?其實就是由堆裡面的最小的資料乘以 2, 3, 5 得到的。那麼怎麼獲取堆裡面的最小的值呢?就是用最小堆就可以了。

對於求第幾個醜數,那麼第幾次迴圈得到的最小堆的堆頂的值肯定就是相應的結果,那麼具體的**如下:

def

nth_ugly_number

(self, n :

int)

->

int:

q =[1

]# 初始化堆,1是第乙個醜數,也是最小的。

for _ in

range(1

, n)

:# 將最小的醜數從堆中取出,然後乘以2,3,5放到堆中

# 處理可能出現的重複的數字,如val == 2,q[0] == 2

while q and q[0]

== val:

# 將新生成的醜數放到堆中

for i in[2

,3,5

]:return q[

0]

以後自己遇到想不明白的問題還是要多想一下,沒準什麼時候就突然開竅了,然後思路理順了就可以得到相應的結果了。

努力堅持學習,相信一定會越來越好的。

三指標法,LeetCode 264 醜數 II

編寫乙個程式,找出第 n 個醜數。醜數就是質因數只包含 2,3,5 的正整數。示例 輸入 n 10 輸出 12 解釋 1,2,3,4,5,6,8,9,10,12 是前 10 個醜數。說明 1 是醜數。n 不超過1690。預計算 1690 個醜數 1.初始化陣列 nums 和三個指標 i2,i3,i5...

leetcode題 264 醜數 II(中等)

一 題目描述 264.醜數 ii 中等 編寫乙個程式,找出第 n 個醜數。醜數就是只包含質因數 2,3,5 的正整數。示例 輸入 n 10 輸出 12 解釋 1,2,3,4,5,6,8,9,10,12 是前 10 個醜數。說明 1 是醜數。n 不超過1690。二 解題思路 三指標動態規劃法 1 定義...

leetcode第264題 醜數 (動態規劃)

編寫乙個程式,找出第 n 個醜數。醜數就是只包含質因數 2,3,5 的正整數。示例 輸入 n 10 輸出 12 解釋 1,2,3,4,5,6,8,9,10,12 是前 10 個醜數。說明 1 是醜數。n 不超過1690。並不用每次都嘗試所有組合,我們需要過濾掉不可能的組合 已知2,3,5與已有醜數相...