大佬,牛!!!
- 题目:这个题其实我没太看懂,主要是1为什么可以。这里我就不钻牛角尖了,而且之前我以为是两个数相乘。也就是说,我最开始理解的思路63=79是不可以的,因为9不是357里面的值。其实题目的意思是63=73*3,这样就可以了。
- 大佬的思路:思路就是动态规划,然后让之前的值都乘3、5、7,这样得到的结果就是满足条件的,但是需要进行排序,这个排序,其实就是用了一个类似三指针,三个指针指向dp三个下标,然后看这个三个值乘357以后的结果,找到最小值,那么下一个dp的值就是这个值,并且这个对应的指针要+1.
- 技巧:动态规划
java代码
class Solution {
public int getKthMagicNumber(int k) {
int[] dp = new int[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] = Math.min(Math.min(num3, num5), num7);
if (dp[i] == num3) {
p3++;
}
if (dp[i] == num5) {
p5++;
}
if (dp[i] == num7) {
p7++;
}
}
return dp[k];
}
}
- 总结:题目不是特别好理解,而且这个dp用的太巧妙了。也算是学到了。