看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~
谁能九层台,不用累土起!
题目
有些数的素因子只有3,5,7,请设计一个算法找出第k个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是1,3,5,7,9,15,21。
示例:
输入: k = 5
输出: 9
解题思路
- 我们用数组来记录这些素因子
- 数的生成规则为
3,5,7分别乘上3,5,7的倍数 - 当时乘上一个类似于
15这样既是3又是5的倍数时,会产生重复数15*3和9*5 - 因此我们需要排除掉重复的数
- 我们用三个指针来分别记录
3的倍数,5的倍数和7的倍数 - 将对应的倍数进行比较只记录较小的值,并将指针后移一位,重复k次
解题代码
var getKthMagicNumber = function(k) {
if(k==1) return k
let arr = [1]
let i3 = 0
let i5 = 0
let i7 = 0
for(let i=1;i<k;i++){
arr[i] = Math.min(arr[i3]*3,arr[i5]*5,arr[i7]*7)
if(arr[i]==arr[i3]*3) i3++;
if(arr[i]==arr[i5]*5) i5++;
if(arr[i]==arr[i7]*7) i7++;
}
return arr[k-1]
};
如有任何问题或建议,欢迎留言讨论!