有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。
示例 1:
输入: k = 5
输出: 9
思路:丑数变形,直接递推即可。
class Solution {
public int getKthMagicNumber(int k) {
int p1 = 0, p2 = 0, p3 = 0;
int[] dp = new int[k];
dp[0] = 1;
for (int i = 1; i < k; i++) {
dp[i] = Math.min(3 * dp[p1], Math.min(5 * dp[p2], 7 * dp[p3]));
if (dp[i] == 3 * dp[p1]) p1++;
if (dp[i] == 5 * dp[p2]) p2++;
if (dp[i] == 7 * dp[p3]) p3++;
}
return dp[k - 1];
}
}