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 中的键,检查是否能被它整除。

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

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


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目链接:412. Fizz Buzz 题目描述 Write a program that outputs the...
    Mereder阅读 215评论 0 0
  • 412 Fizz Buzz Fizz Buzz Description:Write a program that ...
    air_melt阅读 340评论 0 0
  • 题目 Write a program that outputs the string representation...
    Eazow阅读 144评论 0 0
  • 【题目描述】写一个程序,输出从 1 到 n 数字的字符串表示。 如果 n 是3的倍数,输出“Fizz”; 如果 n...
    1江春水阅读 156评论 0 0
  • 嗡响 野地里飞起千万只蚊 世界不会平静了。 微妙的平衡摇摇欲坠。 我列举过火 崇拜过刀剑 追慕过狂风 暴雨,还有 ...
    心种阅读 104评论 0 1