三指標法,LeetCode 264. 醜數 II
阿新 • • 發佈:2021-01-13
技術標籤:演算法刷題資料結構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 。
在 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]