给你一个整数 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 通常被视为丑数。
解题思路:采用三指针,任何一个丑数都可以通过*2,*3,*5的到一个新的丑数,因此要将每个数都进行遍历。并计算相应的值,通过三指针保证每个指针的值递增。
class Solution {
public:
int nthUglyNumber(int n) {
int i = 1, j = 1, k = 1;
vector<int>dp(n + 1);
dp[1] = 1;
for (int l = 2; l <=n; ++l) {
dp[l] = min(min(dp[i]*2, dp[j] * 3), dp[k] * 5);
if (dp[l] == dp[i] * 2) i++;
if (dp[l] == dp[j] * 3) j++;
if (dp[l] == dp[k] * 5) k++;
}
return dp[n];
}
};