解法一:
function sumOfMultiples(num) {
// Implement your solution here
let sum = 0;
for(let i=1; i<num; i++){
if(i%3 == 0 || i%5 == 0){
sum += i
}
}
return sum
}
sumOfMultiples(1000) 'console.log(233168)'
解法二:
通过查询相关文章发现一例巧妙运用数学等差数列完成的解法。在此记录一下。
function sumOfMultiples(num){
function sum(n){
return n * (n+1) / 2
}
return sum(Math.floor((input - 1 ) / 3)) * 3 + sum(Math.floor((input - 1 ) / 5)) * 5 - sum(Math.floor((input - 1 ) / 15)) * 15
}
相关思路:
一个公差为的等差数列前项的级数为:
第二种方法第一步就用了(a1+an)/33,所以就变成了3(1+333)*333/2,这一步就是把整除3的所有项都加起来。
同理,sum(Math.floor(input-1)/5))*5中,就把1000以内中能整除5的所有项都加起来最后能整除3和整除5里面有重复的数,比如15,这时就把重复除以15的数减掉,就能获得1000以内能被3或5整除的数字之和。
解法三:
function sum(value) {
var newArr = [];
for (var i = 0; i < value; i++) {
if (i % 3 === 0 || i % 5 === 0) {
newArr.push(i);
}
}
console.log(newArr);
return newArr.reduce((a, b)=>{
return a + b
});
}
sum(1000); 'console.log(233168)'
Comments | NOTHING