↓快轉到主要內容
  1. LeetCode/

LeetCode 412: Fizz Buzz

·1 分鐘· ·
LeetCode Easy Math String Simulation
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-23

  • 提交紀錄:Wrong Answer ×4 → Accepted

解題思路
#

從 1 到 n 逐一判斷:i % 15 == 0 要先判斷(不然會先被 3 或 5 攔走),接著 % 3、% 5,都不是就放 str(i)。

我的嘗試
#

前四次都 WA:

  • 第一版用 // 判斷倍數(i // 15 == 0 是「小於 15」),迴圈也只跑 range(3)。
  • 接下來幾版把開頭寫死成 ["1", "2"] 再從 3 開始,// 沒改之前全部都變成 FizzBuzz;改成 % 之後,n = 1 時還是回傳兩個元素。拿掉寫死的開頭才 AC。

正確解法
#

class Solution:
    def fizzBuzz(self, n: int) -> List[str]:
        res = []
        for i in range(1, n + 1):
            if i % 15 == 0:
                res.append("FizzBuzz")
            elif i % 3 == 0:
                res.append("Fizz")
            elif i % 5 == 0:
                res.append("Buzz")
            else:
                res.append(str(i))
        return res

複雜度
#

時間 O(n),空間 O(n)(輸出)。

要特別避免的錯誤
#

  • 判斷倍數用 %。
  • 範圍是 1..n,不要寫死開頭的元素。
  • 數字要轉成字串。

面試口說整理
#

我從 1 到 n 逐一判斷,先看是不是 15 的倍數,再看 3 和 5,都不是就放數字的字串。時間 O(n)。

相關文章

LeetCode 67: Add Binary
·1 分鐘
LeetCode Easy Math String Bit-Manipulation Simulation
LeetCode 67 解題筆記:從兩個字串的尾巴往前逐位相加,進位是 sum // 2,這一位是 sum % 2
LeetCode 405: Convert a Number to Hexadecimal
·1 分鐘
LeetCode Easy Math String Bit-Manipulation
LeetCode 405 解題筆記:負數先加上 2^32 變成補數,再每次取 4 個位元(% 16)轉成十六進位;0 要特別處理
LeetCode 258: Add Digits
·1 分鐘
LeetCode Easy Math Simulation Number-Theory
LeetCode 258 解題筆記:反覆把位數相加直到剩一位;O(1) 解法是 digital root:1 + (n - 1) % 9
LeetCode 171: Excel Sheet Column Number
·1 分鐘
LeetCode Easy Math String
LeetCode 171 解題筆記:從左到右 res = res × 26 + 字母的值(A = 1)
LeetCode 168: Excel Sheet Column Title
·1 分鐘
LeetCode Easy Math String
LeetCode 168 解題筆記:Excel 欄名是沒有 0 的 26 進位,每一位用 (n - 1) % 26 取字母,再 n = (n - 1) // 26
LeetCode 13: Roman to Integer
·1 分鐘
LeetCode Easy Hash-Table Math String
LeetCode 13 解題筆記:從左到右加每個符號的值,如果它比右邊的符號小就改成減