LeetCode 面试题 17.09. 第 k 个数 JavaScript 解决方案

238 阅读1分钟

思路

来源:leetcode-cn.com/problems/ge…

用数组 res 存储 第 [i] 个数的值 映射的各项。

res[0] = 1

走循环,下一个数,小于 currentIndex 的所有 index 的值,全部轮询一遍,
拿到最小的 " * 3 " 或者 " * 5 " 或者 " * 7 "

赋值给 res currentIndex

把 res[n - 1] 返回即可

时间已经够用了,教程里还有更近两步的优化,感兴趣可以移步。

代码

/**
 * @param {number} k
 * @return {number}
 */
var getKthMagicNumber = function(k) {
    let res = [1];
    for (let i = 1; i < k; ++i) {
        let min = Number.MAX_VALUE;
        for (let j = 0; j < i; ++j) {
            if (res[j] * 3 > res[i - 1]) {
                min = Math.min(min, res[j] * 3);
            }
            if (res[j] * 5 > res[i - 1]) {
                min = Math.min(min, res[j] * 5);
            }
            if (res[j] * 7 > res[i - 1]) {
                min = Math.min(min, res[j] * 7);
            }
        }
        res[i] = min;
    }
    return res[k - 1]
};