codewars 6kyu Multiples of 3 or 5
该题大意是计算小于number 的数中能够整除3或整除5的数 的和。如果一个数既能被3整除也能被5整除,那么这个数只计算一次。
我写的代码:
function solution(number) {
var ans = 0;
for (let i = 3; i < number; i++) {
if (i % 15 == 0) {
ans += i;
} else if (i % 3 == 0) {
ans += i;
} else if (i % 5 == 0) {
ans += i;
}
}
return ans;
}
感觉复述完题目大意可以直接用一个或来判断:
function solution(number) {
var ans = 0;
for (let i = 3; i < number; i++) {
if (i % 3 == 0 || i % 5 == 0) {
ans += i;
}
}
return ans;
}
然后呢,没错,我又发现了一两行的解法!
function solution(number){
var n3 = Math.floor(--number/3), n5 = Math.floor(number/5), n15 = Math.floor(number/15);
return (3 * n3 * (n3 + 1) + 5 * n5 * (n5 + 1) - 15 * n15 * (n15+1)) /2;
}
solution= n=> n<=0?0:Array.from({length: n}, (_,i) => (i%3==0||i%5==0)?i:0).reduce((x,y)=>x+y)
function solution(number){
return number < 1 ? 0 : [...new Array(number).keys()].filter(n => n % 3 == 0 || n % 5 == 0).reduce((a, b) => a + b);
}