# 412 Fizz Buzz

# 题目

写一个程序,输出从 1 到 n 数字的字符串表示。

  1. 如果 n 是3的倍数,输出“Fizz”;

  2. 如果 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"
]

# 题解

  1. 普通的解法,按顺序统计是否是 3 和 5 的倍数。

TIP

执行用时:76 ms, 在所有 JavaScript 提交中击败了 99.11% 的用户
内存消耗: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)`,使用几个变量来储存值
  • 最好情况:
  • 最坏情况:
  1. 优化了 if else 判断,通过字符串拼接的方式来设置值。

TIP

执行用时:80 ms, 在所有 JavaScript 提交中击败了 96.27% 的用户
内存消耗: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)`,使用几个变量来储存值
  • 最好情况:
  • 最坏情况:
  1. 使用了一个 Map 结构来储存要序列化的值,这样配置的好处是不需要修改逻辑代码,只需要新增 map 的 key 即可。不过这样牺牲了算法时间和空间

TIP

执行用时:88 ms, 在所有 JavaScript 提交中击败了 82.71% 的用户
内存消耗: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 结构来储存要序列化的值
  • 最好情况:
  • 最坏情况:
最后更新时间: 11/2/2020, 11:07:50 PM