我得到了一个数字,我需要找到数字下方3和5的倍数之和。
例如:
20 => 78 = 3 + 5 + 6 + 9 + 10 + 12 + 15 + 18

我的代码有效,但不适用于大于1,000,000的数字(我对其进行了100,000的测试-结果延迟2秒)。因此,应该对其进行优化。有人可以帮我吗?为什么我的代码运行缓慢?谢谢。

我的逻辑如下:


向数组添加倍数
过滤重复值
汇总所有值


我的代码:

  function sumOfMultiples(number) {

    let numberBelow = number - 1;
    let numberOfThrees = Math.floor(numberBelow / 3);
    let numberOfFives = Math.floor(numberBelow / 5);
    let multiples = [];
    let multipleOfThree = 0;
    let multipleOfFive = 0;

    for (var i = 0; i < numberOfThrees; i++) {
      multiples.push(multipleOfThree += 3);
    }

    for (var j = 0; j < numberOfFives; j++) {
      multiples.push(multipleOfFive += 5);
    }

    return multiples
              .filter((item, index) => multiples.indexOf(item) === index)
              .reduce((a, b) => a + b);
 }

最佳答案

您可以运行从1number的循环,并使用模运算符%检查i是除以3还是5



function sumOfMultiples(number) {
  var result = 0;

  for (var i = 0; i < number; i++) {
    if (i % 5 == 0 || i % 3 == 0) {
      result += i;
    }
  }

  return result;
}

console.log(sumOfMultiples(1000));
console.log(sumOfMultiples(100000));
console.log(sumOfMultiples(10000000));

关于javascript - 求3和5的倍数和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57933934/

10-14 19:50