[路飞]leetcode 17.09.第k个数

109 阅读1分钟

有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。力扣原文

示例 1:

输入: k = 5
输出: 9

题目的大体意思,找到一个长度为5的list,并返回最后一个,且list中的每一项的一个因子都在3、5、7中。根据题目给出的前五个找出的规律,根据题目list的第一个必然是1,1就是下一个数的第二个素因子,13、15、1*7,取三个结果中的最小值为下一个数,同时对应的第一个素因子指向得出的结果,如果结果有相同的,那么对应的素因子同时都向后移一位,依次类推,直到找到第K个数

var getKthMagicNumber = function (k) {
  let p3=p5=p7=0 ;
  let list = [1];
  for (let m = 0; m < k-1; m++) {
    let val3=list[p3]*3,val5=list[p5]*5,val7=list[p7]*7;
    let min=Math.min(val3,val5,val7);
    list.push(min)
    val3===min&&p3++
    val5===min&&p5++
    val7===min&&p7++
  }
  return list[list.length-1]
};