算法:一个数组中所有元素的最小公倍数

算法:一个数组中所有元素的最小公倍数

这个我搜索了一下网上的解答,发现答案基本类似,但是都有问题,测试案例[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
posted @ 2020-05-15 14:05  木子呆头  阅读(1092)  评论(0编辑  收藏  举报