查找3和5的倍数之和,JS

8 浏览
0 Comments

查找3和5的倍数之和,JS

我被给定一个数字,需要找到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);    
 }

0