面试题 17.09. 第 k 个数-动态规划
有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。
示例 1:
输入: k = 5
输出: 9
解题代码如下:
这题算法思想就是,他的因数一定是三个最小因素相乘其他因数得到的,因为,我们每次都让他的最小因素乘一个刚好大一点因素,比较三个大小,最小的那个作为新的因素加入状态
int getKthMagicNumber(int k) {
int dp[k + 1];
dp[1] = 1;
int p3 = 1, p5 = 1, p7 = 1;
for (int i = 2; i <= k; i++) {
int num3 = dp[p3] * 3, num5 = dp[p5] * 5, num7 = dp[p7] * 7;
dp[i] = fmin(fmin(num3, num5), num7);
if (dp[i] == num3) {
p3++;
}
if (dp[i] == num5) {
p5++;
}
if (dp[i] == num7) {
p7++;
}
}
return dp[k];
}