編寫乙個程式,找出第 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與已有醜數相...