我得到了一个数字,我需要找到数字下方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);
}
最佳答案
您可以运行从1
到number
的循环,并使用模运算符%
检查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/