声明:
今天是第92道题。写一个程序,输出从 1 到 n 数字的字符串表示。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:写一个程序,输出从 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。常规思路,按照逻辑写,代码如下。
执行用时: 68 ms, 在Fizz Buzz的Python3提交中击败了87.02% 的用户
class Solution:
def fizzBuzz(self, n):
"""
:type n: int
:rtype: List[str]
"""
res = []
for i in range(1,n+1):
if i % 3 == 0 and i % 5 != 0:
res.append("Fizz")
elif i % 5 == 0 and i % 3 != 0:
res.append("Buzz")
elif i % 5 == 0 and i % 3 == 0:
res.append("FizzBuzz")
else:
res.append(str(i))
return res
# 其实上面第一个if判断语句可以写为:
if i % 3 == 0 and i % 5 == 0: res.append("FizzBuzz")
# 这样后面的判断逻辑就可以简化了
解法2。还有种解法挺有意思的,先把result全部填充为对应的index,然后把符合条件的替换掉,也有些坑要注意,代码如下。
执行用时: 100 ms, 在Fizz Buzz的Python3提交中击败了13.49% 的用户
class Solution:
def fizzBuzz(self, n):
"""
:type n: int
:rtype: List[str]
"""
res = [str(i) for i in range(1,n+1)]
for i in range(2,n,3): # 注意这里不是range(3,n+1,3),因为res下标是从0开始的,所以要相应左移一位
res[i] = 'Fizz'
for i in range(4,n,5):
if res[i] == 'Fizz':
res[i] = 'FizzBuzz'
else:
res[i] = 'Buzz'
return res
结尾
解法1:原创
解法2:LeetCode