算法:一个数组中所有元素的最小公倍数
算法:一个数组中所有元素的最小公倍数
这个我搜索了一下网上的解答,发现答案基本类似,但是都有问题,测试案例[2,3,4]均是返回24,应当返回12才对。
这里我贴出自己修改后的代码
这里我没有考虑数组为空的情况,也没有考虑数组中只要一个元素的情况,也没有考虑数组中有0的情况,自己可视情况补充完整,这里主要是讲一下思路。
通过find函数找到两个数 a 和 b 的最小公倍数,然后对数组中的前两个数先找一下最小公倍数,这个最小公倍数再与第三个数用find方法,依次类推......
我搜索到的解答是find中j都是选择从min开始,这不完全符合要求,比如两个数 4 和 6 ,如果j从 4 开始取得话,结果是24,这里就出问题了,所以正确的结果应该是 j 从 2 开始。
function find(a, b) {
var max = Math.max(a, b),
min = Math.min(a, b),
num;
for (let j = 2; j <= max; j++) {
num = min * j;
if (num % max === 0) {
return num
}
}
}
function solution(arr) {
var num = find(arr[0], arr[1]);
for (let i = 2; i < arr.length; i++) {
num = find(arr[i], num)
}
return num
}
// test
console.log(solution([2, 3, 4])); // 12