写一个程序,输出从 1 到 n 数字的字符串表示。
如果 n 是3的倍数,输出“Fizz”;
如果 n 是5的倍数,输出“Buzz”;
如果 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.代码量极少