问题描述
给定一个整数 n,需要找出第 n 个丑数。丑数就是只包含质因数 2, 3, 5 的正整数。
示例:
输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
解法一
解题思路:
使用动态规划的方法,维护一个数组 dp,其中 dp[i] 表示第 i 个丑数。通过 2, 3, 5 依次乘以前面的丑数来生成新的丑数。
/*
* @lc app=leetcode.cn id=263 lang=javascript
*
* [263] 丑数
*/
// @lc code=start
function nthUglyNumber(n) {
let dp = [1];
let p2 = 0, p3 = 0, p5 = 0;
for (let i = 1; i < n; i++) {
let next2 = dp[p2] * 2,
next3 = dp[p3] * 3,
next5 = dp[p5] * 5;
dp[i] = Math.min(next2, next3, next5);
if (dp[i] == next2) p2++;
if (dp[i] == next3) p3++;
if (dp[i] == next5) p5++;
}
return dp[n - 1];
}
// @lc code=end