【一天一道Leetcode】丑数Ⅱ

看那个码农

共 2348字,需浏览 5分钟

 · 2021-04-11


本篇推文共计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】笨阶乘



☆ END ☆

你与世界

只差一个

公众号

浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报