题目
给你一个整数 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
解题思路
- 我第一眼看到这个题的思路是遍历数字,然后遇到是丑数的就把它添加到数组中。
- 结果发现,我这样的方法是超时的,所以只可以用生成丑数的方法了。
- 就是首先生成一个n个维度的数组,然后生成3个对应的种类数。
- 然后判断丑数的种类,使对应的种类个数加一。
Code
class Solution:
def nthUglyNumber(self, n: int) -> int:
if n < 0:
return 0
ls = [1] * n
cur1,cur2,cur3 = 0,0,0
for i in range(1,n):
ls[i] = min(2*ls[cur1],3*ls[cur2],5*ls[cur3])
if ls[i] == 2*ls[cur1]: cur1 += 1
if ls[i] == 3*ls[cur2]: cur2 += 1
if ls[i] == 5*ls[cur3]: cur3 += 1
return ls[-1]