1. 程式人生 > 其它 >三指標法,LeetCode 264. 醜數 II

三指標法,LeetCode 264. 醜數 II

技術標籤:演算法刷題資料結構python演算法leetcode

考研人資訊庫

此公眾號會發表計算機考研(初複試資訊)、夏令營等資料,方便考研人對資訊的獲取,節約自身查詢資料的時間,回覆408,可獲得資料結構、作業系統、計算機網路、計算機組成原理全科資料

編寫一個程式,找出第 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 。

2.迴圈計算所有醜數。每一步:
在 nums[i2] * 2,nums[i3] * 3 和 nums[i5] * 5 選出最小的數字新增到陣列 nums 中。
將該數字對應的因子指標向前移動一步。
3.在陣列中返回所需的醜數。

class Ugly:
    def __init__(self):
        self.nums = nums = [1, ]
        i2 = i3 = i5 = 0

        for i in range(1, 1690):
            ugly = min(nums[i2] * 2, nums[i3] * 3, nums[i5] * 5)
            nums.append(ugly)

            if ugly == nums[i2] * 2: 
                i2 += 1
            if ugly == nums[i3] * 3:
                i3 += 1
            if ugly == nums[i5] * 5:
                i5 += 1
            
class Solution:
    u = Ugly()
    def nthUglyNumber(self, n):
        return self.u.nums[n - 1]