【一天一道Leetcode】丑数Ⅱ
看那个码农
共 2348字,需浏览 5分钟
·
2021-04-11 22:49
本篇推文共计2000个字,阅读时间约3分钟。
01
题目描述
题目描述:
给你一个整数n,请你找出并返回第n个丑数。
丑数就是只包含质因数 2、3、5的正整数。
示例 1:
输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12]
是由前 10 个丑数组成的序列。
示例 2:
输入:n = 1
输出:1
解释:1 通常被视为丑数。
提示:
1 <= n <= 1690
02
思路和方法
根据题目中丑数的定义,0和负整数一定不是整数。
1是第一个丑数。
我们通过题目中丑数的定义,丑数就是只包含质因数 2、3、5的正整数。
我们可以依次算出所有丑数,直到算到所需的第n个丑数,进行输出为止。
如何计算?
我们可以根据丑数的性质,只包含2,3,5三个质因数。我们可以分别设置三个指针用来计算丑数。
再设置一个数组用于存储从小到大遍历到的丑数。
最后返回数组中的第n个元素即可。
我们的代码输出为:
class Solution:
def nthUglyNumber(self, n: int) -> int:
if n<=0:
return false
# 放进第一个丑数:1
nums = [1]
# 三个指针初始化
i2 = 0
i3 = 0
i5 = 0
# 算出所有丑数,直到所需的第n个为止
for i in range(1,n):
# 从小到大,按照丑数定义收集丑数
ugly = min(nums[i2] * 2,nums[i3] * 3,nums[i5] * 5)
# 将丑数放进结果数组中
nums.append(ugly)
# 指针移动,从小到大地寻找丑数
if(nums[i] == nums[i2] * 2): i2 += 1
if(nums[i] == nums[i3] * 3): i3 += 1
if(nums[i] == nums[i5] * 5): i5 += 1
# 返回第n个丑数
return nums[n-1]
【年终总结】你好2021,再见2020。
【秋招纪实录】一篇特别正经的【腾讯】求职经验分享
【一天一道Leetcode】笨阶乘
你与世界
只差一个
公众号
评论