Leetcode-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.模拟法

思路

就像你每次玩 FizzBuzz 那样,你只需要判断这个数是能被 3 整除? 还是能被 5 整除? 或者是都能被整除。

算法

初始化一个空的答案列表。

遍历 1 ... N1...N。

对于每个数,判断它能不能同时被 3 和 5 整除,如果可以就把 FizzBuzz 加入答案列表。

如果不行,判断它能不能被 3 整除,如果可以,把 Fizz 加入答案列表。

如果还是不行,判断它能不能被 5 整除,如果可以,把 Buzz 加入答案列表。

如果以上都不行,把这个数加入答案列表。


2.字符串连接

算法

我们放弃使用之前的联合判断,取而代之依次判断是否能被给定的数整数。这道题中,就是依次判断能不能被 3 整除,能不能被 5 整除。如果能被 3 整除,就把对应的 Fizz 连接到答案字符串,如果能被 5 整除,就把 Buzz 连接到答案字符串。

举个例子,现在需要判断 15,步骤将会是下面这样的:

条件 1: 15 % 3 == 0, num_ans_str = "Fizz"

条件 2: 15 % 5 == 0, num_ans_str += "Buzz"

=> num_ans_str = "FizzBuzz"


3.散列表法

算法

把所有的映射关系放在散列表 fizzBuzzHash 中,这个散列表形如 { 3: 'Fizz', 5: 'Buzz' }。

遍历 1 ... N1...N。

对于每个数字,遍历 fizzBuzzHash 中的键,检查是否能被它整除。

如果这个数能被键整除,就把当前键映射的值加到到答案字符串后面去。对于散列表的每个键值对,都这样操作。

最后将答案字符串加入答案列表。


你可能感兴趣的:(Leetcode-412.Fizz Buzz)