leetcode刷题笔记-01-Fizz Buzz

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.创建一个空列表list
2.while循环判断是否能对3,5除尽
3.根据判断条件将结果添加到空列表list里
4.最后返回列表

class Solution:
    def fizzBuzz(self, n: int) -> List[str]:
        i = 1
        list = []
        while i<=n:
            if i%3!=0 and i%5!=0:
                list.append("%s"%i)
            elif i%3==0 and i%5!=0:
                list.append("Fizz")
            elif i%3!=0 and i%5==0:
                list.append("Buzz")
            else :
                list.append("FizzBuzz")
            i+=1
        return list

我的思路缺点

1.遇到复杂情况便需要写很多判断条件,如:此时不止3,5,还另外加对7除尽的是Jazz,那判断条件就很多了。
2.python代码本来以简洁著称,此处代码量太多,其实并不需要。
3.执行用时 :64 ms, 在所有 Python3 提交中击败了86.96% 的用户
内存消耗 :14.6 MB, 在所有 Python3 提交中击败了5.25%的用户
空间复杂度太大

网友解题思路

1.若i%3!=0,即i不能被3整除时,为真(1),即not i%3 表示为0
同理5也是这个思路,所以直接用字符串乘以真值来表示
2.所以直接一句列表生成式搞定

class Solution:
    def fizzBuzz(self, n:int) -> List[str]:
        return ['Fizz' * (not i % 3) + 'Buzz' * (not i % 5) or str(i) for i in range(1, n+1)]

网友思路优点

1.代码量极少

你可能感兴趣的:(leetcode刷题笔记-01-Fizz Buzz)