leetcode_264 丑数 II

84 阅读1分钟

要求

给你一个整数 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 通常被视为丑数。

核心代码

class Solution:
    def nthUglyNumber(self, n: int) -> int:
        ugly = [1]
        i2,i3,i5 = 0,0,0
        while n > 1:
            u2,u3,u5 = 2 * ugly[i2],3 * ugly[i3],5 * ugly[i5]
            umin = min((u2,u3,u5))
            if umin == u2:
                i2 += 1
            if umin == u3:
                i3 += 1
            if umin == u5:
                i5 += 1
            ugly.append(umin)
            n -= 1
        return ugly[-1]

image.png

解题思路:我们看这个题比较巧妙的一点是,我们设置了三个u2,u3,u5,在第一个2乘完一次之后,下标 +1,我们会向后走一个位置,但是3、5的序号没变,依次向后不断滑动,我们就能得到从小到大的一个丑数列表,最后取出来最后一个就行了。