/**
* @param {number} n
* @return {string[]}
*/
var fizzBuzz = function(n) {
let ret = [];
while(n-- > 0) {
let temp = String(n + 1);
let is5 = false;
let is3 = false
if ((n + 1) % 5 === 0) {
temp = 'Buzz';
is5 = true;
}
if ((n + 1) % 3 === 0) {
temp = 'Fizz';
is3 = true;
}
temp = (is5 && is3) ? 'FizzBuzz' : temp;
ret.unshift(temp);
}
return ret;
};
虽然通过了,但是速度和内存的排名有点低,想办法优化一下:
- unshift比push慢
改成这样
//...
ret.push(temp);
};
return ret.reverse();
再优化一下:
- 倒序遍历需要给ret倒序输出,我们直接顺序遍历
/**
* @param {number} n
* @return {string[]}
*/
var fizzBuzz = function(n) {
let ret = [];
let i = 1;
while(i <= n) {
let temp = String(i);
let is5 = false;
let is3 = false
if (i % 5 === 0) {
temp = 'Buzz';
is5 = true;
}
if (i % 3 === 0) {
temp = 'Fizz';
is3 = true;
}
temp = (is5 && is3) ? 'FizzBuzz' : temp;
ret.push(temp);
i++;
}
return ret;
};
写一段封装性更好的代码:但是速度又下去了,有得有失吧。。
/**
* @param {number} n
* @return {string[]}
*/
var fizzBuzz = function(n) {
let ret = [];
let i = 1;
let answers = {'3': 'Fizz', '5': 'Buzz'};
let idxs = Object.keys(answers);
while(i <= n) {
let temp = '';
for (let idx of idxs) {
if (i % Number(idx) === 0) {
temp += answers[idx];
}
}
if (!temp) {
temp = String(i);
}
ret.push(temp);
i++;
}
return ret;
};