此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复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]