【LeetCode 簡單題】92-Fizz Buzz
阿新 • • 發佈:2018-11-19
宣告:
今天是第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