# 412 Fizz Buzz
# 题目
写一个程序,输出从 1 到 n 数字的字符串表示。
如果 n 是3的倍数,输出“Fizz”;
如果 n 是5的倍数,输出“Buzz”;
3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。
示例:
n = 15,
返回:
[
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
"FizzBuzz"
]
# 题解
- 普通的解法,按顺序统计是否是 3 和 5 的倍数。
TIP
执行用时:76 ms, 在所有 JavaScript 提交中击败了 99.11% 的用户
内存消耗:40 MB, 在所有 JavaScript 提交中击败了 16.44% 的用户
内存消耗:40 MB, 在所有 JavaScript 提交中击败了 16.44% 的用户
/**
* @param {number} n
* @return {string[]}
*/
var fizzBuzz = function(n) {
if(!n) return []
let result = []
const FIZZ = 'Fizz'
const BUZZ = 'Buzz'
const FIZZBUZZ = 'FizzBuzz'
for(let i=1;i<=n;i++) {
let currentValue = i.toString()
if(i%3 == 0) {
if(i%5 == 0) {
result.push(FIZZBUZZ)
} else {
result.push(FIZZ)
}
}else if(i%5 == 0) {
if(i%3 == 0) {
result.push(FIZZBUZZ)
} else {
result.push(BUZZ)
}
} else {
result.push(currentValue)
}
}
return result
};
- 时间复杂度: `O(n)`,一个 for循环
- 空间复杂度: `O(1)`,使用几个变量来储存值
- 最好情况:
- 最坏情况:
- 优化了 if else 判断,通过字符串拼接的方式来设置值。
TIP
执行用时:80 ms, 在所有 JavaScript 提交中击败了 96.27% 的用户
内存消耗:39.5 MB, 在所有 JavaScript 提交中击败了 43.21% 的用户
内存消耗:39.5 MB, 在所有 JavaScript 提交中击败了 43.21% 的用户
/**
* @param {number} n
* @return {string[]}
*/
var fizzBuzz = function(n) {
if(!n) return []
let result = []
const FIZZ = 'Fizz'
const BUZZ = 'Buzz'
const FIZZBUZZ = 'FizzBuzz'
for(let i=1;i<=n;i++) {
let resultStr = ''
if(i%3 == 0) {
resultStr += FIZZ
}
if(i%5 == 0) {
resultStr += BUZZ
}
if(resultStr == '') {
resultStr += i
}
result.push(resultStr)
}
return result
};
- 时间复杂度: `O(n)`,一个 for循环
- 空间复杂度: `O(1)`,使用几个变量来储存值
- 最好情况:
- 最坏情况:
- 使用了一个 Map 结构来储存要序列化的值,这样配置的好处是不需要修改逻辑代码,只需要新增 map 的 key 即可。不过这样牺牲了算法时间和空间
TIP
执行用时:88 ms, 在所有 JavaScript 提交中击败了 82.71% 的用户
内存消耗:40 MB, 在所有 JavaScript 提交中击败了 15.9% 的用户
内存消耗:40 MB, 在所有 JavaScript 提交中击败了 15.9% 的用户
/**
* @param {number} n
* @return {string[]}
*/
var fizzBuzz = function(n) {
if(!n) return []
let result = []
const FIZZ = 'Fizz'
const BUZZ = 'Buzz'
const map = new Map()
map.set(3, FIZZ)
map.set(5, BUZZ)
for(let i=1;i<=n;i++) {
let resultStr = ''
for(let key of map.keys()) {
if(i%key == 0) {
resultStr += map.get(key)
}
}
if(resultStr == '') {
resultStr += i
}
result.push(resultStr)
}
return result
};
- 时间复杂度: `O(m*n)`,n 为 n 的大小,m 为 map 的 key 个数
- 空间复杂度: `O(n)`,使用了一个 map 结构来储存要序列化的值
- 最好情况:
- 最坏情况: