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