力扣-面试题17.09-第k个数

题目:
面试题 17.09. 第 k 个数(medium)


解题思路:
类似剑指offer中求丑数的做法,维护三个乘因子数组,每次取最小的进结果数组中,把这个看成是三指针的动态规划例题也可以。


代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Java:
public int getKthMagicNumber(int k) {
if(k == 0) return 0;
int p3 = 0,p5 = 0,p7 = 0;
int[] res = new int[k];
res[0] = 1;
for(int i = 1;i < k;i++){
res[i] = Math.min(res[p3]*3, Math.min( res[p5]*5 , res[p7]*7 ) );
if(res[i] == res[p3]*3) p3++;
if(res[i] == res[p5]*5) p5++;
if(res[i] == res[p7]*7) p7++;
}
return res[k-1];
}