该算法题来自于 codewars【语言: javascript】,翻译如有误差,敬请谅解~
- 任务
- 返回一个包含从1到N的数组,其中N是参数值。 N不会小于1。
- 但是,如果满足以下任何条件,请替换某些值:
1.如果该值为3的倍数,则使用'Fizz'代替 。
2.如果值为5的倍数:则使用'Buzz'代替。
3.如果该值是3&5的倍数:则使用'FizzBuzz'代替。
- 解答
- 其一
const fizzbuzz = n => {
let arr = [];
for(let i=1;i<=n;i++){
if(i%3 && i%5){
arr.push(i);
} else {
!(i%3+i%5) ? arr.push('FizzBuzz') : (i%3 ? arr.push('Buzz') : arr.push('Fizz'));
}
}
return arr;
}
const fizzify = fizzbuzz;
- 其二
var fizzify = fizzbuzz = n => {
return Array.apply(null, new Array(n)).map(function(e, i){
return (++i % 3 ? '' : 'Fizz' ) + (i % 5 ? '' : 'Buzz') || i;
});
}
- 其三
function fizzbuzz(n) {
var fizzified = [];
for (var i = 1; i <= n; i++) {
var val = '';
if (i % 3 == 0) val += 'Fizz';
if (i % 5 == 0) val += 'Buzz';
fizzified.push(val || i);
}
return fizzified;
}
function fizzify(n) {
return fizzbuzz(n);
}
- 其四
function fizzify(i) {
if (i % 15 == 0) return 'FizzBuzz';
else if (i % 5 == 0) return 'Buzz';
else if (i % 3 == 0) return 'Fizz';
else return i;
}
function fizzbuzz(n) {
var res = [];
for (var i = 1; i <= n; ++i) res.push(fizzify(i));
return res;
}
- 其五
// [...Array(n+1).keys()].slice(1) 可以获取1-n的连续数字
const fizzify = fizzbuzz = n => [...Array(n+1).keys()].slice(1).map(x=>x%15===0?'FizzBuzz':x%3===0?'Fizz':x%5===0?'Buzz':x);
- 加大难度 [6kyu]FizzBuzz++