这个题,第一次听船长讲解,一脸蒙, 然后又听助教讲解,强制理解8成把,但是代码写的很好理解,所以这个题代码能写出来,但是并不是很清楚这个k个数的逻辑处理,就先记录把
/**
* @param {number} k
* @return {number}
*/
var getKthMagicNumber = function(k) {
// 这3个变量用来标记3,5,7 分别被用了几次
let p3 = 0, p5 = 0, p7 = 0;
// 这个变量依次记录规则后面的书 总共有k个的数
let arr = new Array(k);
// 1比较特殊 所以特殊处理
arr[0] = 1;
for(let i = 1; i <= k; i++) {
// 把最小的数给数组
arr[i] = Math.min(arr[p3]*3, Math.min(arr[p5]*5, arr[p7]*7) )
// 以防重复 3*5和5*3一样
if(arr[i] === arr[p3]*3) p3++;
if(arr[i] === arr[p5]*5) p5++;
if(arr[i] === arr[p7]*7) p7++;
}
// arr数组最后一个就是 第k个数
return arr[k -1];
};