题目
有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。
示例
输入: k = 5
输出: 9
解题思路
维护三个指针p3, p5, p7,三个指针都是数组arr的下标,取指针对应值与对应的3、5、7分别相乘,三个值取最小值放进数组,当然,里面会有重复的数,所以, 需要判断当前值与对应指针与对应数值的值是否相等,相等则让对应指针+1,最后得到的就是需要的数因子数组。返回arr[k -1]即可
/**
* @param {number} k
* @return {number}
*/
var getKthMagicNumber = function(k) {
const arr = new Array(k);
// 维护这三个数组下标
let p3 = 0, p5 = 0, p7 = 0;
// 特殊处理1这个数
arr[0] = 1;
for(let i = 1; i < k; i++) {
// 取对应下标与对应素因子的积的最小值放进数组
arr[i] = Math.min(arr[p3]*3, arr[p5]*5, arr[p7]*7);
// 每次有相同数出现时,去重处理,对应下标+1
if(arr[i] === arr[p3]*3) p3++;
if(arr[i] === arr[p5]*5) p5++;
if(arr[i] === arr[p7]*7) p7++;
}
return arr[k - 1];
};