题目简述
有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。
示例
输入: k = 5
输出: 9
JavaScript实现
/**
* @param {number} k
* @return {number}
*/
var getKthMagicNumber = function(k) {
let list = new Array()
list.push(1); //初始
let p3=0, p5=0,p7 = 0; // 定义三个变量,他们初始指向数组第一个元素(下标0)
// 初始,list = [1]
// 每一轮让数组的最后一个元素乘以3,5,7
// list = [1,3] //3,5,7把一组的最小数,插入到数组最后,保证顺序排列
// p3指向的数组元素*3
// p5指向的数组元素*5
// p7指向的数组元素*7
// 把小的数先插入数组后面,然后对应的p向后移动一位
while(list.length < k) {
let n3 = 3 * list[p3], n5 = 5 * list[p5],n7 = 7 * list[p7], minNum;
let arr = [n3,n5,n7].sort(function(a,b){return a-b});//升序排列
minNum = arr[0]; //找到数小的
list.push(minNum);
// 下标后移
if(3 * list[p3] == minNum) p3++;
if(5 * list[p5] == minNum) p5++;
if(7 * list[p7] == minNum) p7++;
}
return list[k-1]
};