LeetCode 412. Fizz Buzz

73 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

LeetCode 412. Fizz Buzz

一、题目描述:

给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:

answer[i] == "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。

answer[i] == "Fizz" 如果 i 是 3 的倍数。

answer[i] == "Buzz" 如果 i 是 5 的倍数。

answer[i] == i (以字符串形式)如果上述条件全不满足。

示例 1:

输入:n = 3

输出:["1","2","Fizz"]

示例 2:

输入:n = 5

输出:["1","2","Fizz","4","Buzz"]

示例 3:

输入:n = 15

输出:

["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]

提示:

1 <= n <= 10^4

来源:力扣(LeetCode)

链接:leetcode.cn/problems/fi…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

  1. 这道题考察了什么思想?你的思路是什么?

    从1到n循环遍历一次,如果取到的值同时是 35 的倍数,就往切片中插入FizzBuzz,如果是 3 的倍数,就往切片中插入Fizz,如果是 5 的倍数,就往其中插入Buzz,如果上述条件都不符合,我们就插入这个数字。

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    很简单的一道题目,当然是一次通过的啊,哈哈哈哈哈,小伞真是太高兴了!

    需要注意此方法应该还可以继续优化。

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    如果 i 是 3 的倍数,则将 “Fizz" 拼接到 answer[i];

    如果 i 是 5 的倍数,则将 “Buzz" 拼接到 answer[i];

    如果 answer[i] 为空,则 i 既不是 3 的倍数也不是 5 的倍数,将 i 拼接到 answer[i]。

    func fizzBuzz(n int) (ans []string) {
        for i := 1; i <= n; i++ {
            sb := &strings.Builder{}
            if i%3 == 0 {
                sb.WriteString("Fizz")
            }
            if i%5 == 0 {
                sb.WriteString("Buzz")
            }
            if sb.Len() == 0 {
                sb.WriteString(strconv.Itoa(i))
            }
            ans = append(ans, sb.String())
        }
        return
    }
    ​
    作者:LeetCode-Solution
    链接:https://leetcode.cn/problems/fizz-buzz/solution/fizz-buzz-by-leetcode-solution-s0s5/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

    执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户

    内存消耗:4 MB, 在所有 Go 提交中击败了8.76%的用户

    通过测试用例:8 / 8

三、AC 代码:

func fizzBuzz(n int) []string {
    answer := make([]string,0)
    for i:=1; i<=n; i++{
        if(i % 3 == 0 && i % 5 == 0){
            answer = append(answer,"FizzBuzz")
        }else if i % 3 == 0{
            answer = append(answer,"Fizz")
        }else if i % 5 == 0{
            answer = append(answer,"Buzz")
        }else{
            answer = append(answer,strconv.Itoa(i))
        }
    }
    return answer
}

执行用时:4 ms, 在所有 Go 提交中击败了90.75%的用户

内存消耗:4 MB, 在所有 Go 提交中击败了43.55%的用户

通过测试用例:8 / 8

四、总结:

这道题目只是一个简单的考察if - else if - else的算法题目,大家应该都能做出来。加油!

作者:掘金酱

链接:juejin.cn/post/706970…

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。