[路飞]_面试题 17.09.第 k 个数

110 阅读1分钟

题目简述

面试题 17.09.第 k 个数

有些数的素因子只有 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]

};