「計算 2 的 100 次方。」
如果你用迴圈乘 100 次,沒有問題。但如果是 2 的 10 億次方呢? 快速冪告訴我們:先算 2²=4,再算 4²=16,再算 16²=256…… 每次「平方」就把指數減半,只需要 log₂(n) 步。 這就是 Math 類題目的精髓——觀察數學規律,把 O(n) 壓縮成 O(log n) 甚至 O(1)。
Palindrome Number
判斷一個整數是否是回文數,不能轉成字串
範例
121 → True
-121 → False
120 → False(結尾 0)
關鍵思路:只反轉後半段
不需要完整反轉整個數字。把後半段的數字逐位「撥進」 reversed_half, 直到 x <= reversed_half(代表後半段已處理完畢)。 最後比較前後兩半是否相等。
x = 1221 的過程
x (12) == rev (12) → True ✓
Edge Case:先排除這兩種情況
- 負數:
x < 0→ False - 末尾為 0 且非 0:
x % 10 == 0 and x != 0→ False(反轉後前面會有多餘的 0)
奇數位數(如 121):迴圈結束時 x = 1,rev = 12, 比較 x == rev // 10 即可(忽略中間那位)。
Pow(x, n)
實作 pow(x, n),n 可能為負整數
Input: x = 2.0, n = 10 → Output: 1024.0
Input: x = 2.0, n = -2 → Output: 0.25
快速冪(Binary Exponentiation)
核心思路:每次把指數減半,底數自乘。
遞推公式
x^n = (x²)^(n/2) 若 n 為偶數
x^n = x · (x²)^((n-1)/2) 若 n 為奇數
x^0 = 1 基底
2^10 的計算過程
4 · 256 = 1024 ✓(回溯收集奇數位的餘數)
迭代版的位元思維
把 n 看成二進位。例如 10 = 1010₂。從最低位開始,遇到 1 就把當前的 x 乘進 result, 然後底數平方。等效於 x^8 · x^2 = x^10, 因為 8+2=10,恰好對應二進位的 1 的位置。
Happy Number
反覆對各位數字的平方和做替換,若最終到達 1 則是 happy number
Input: n = 19
最終到達 1 → True(happy number)
核心問題:會無限循環嗎?
是的。不是 happy number 的數,一定會進入一個循環,永遠不會到達 1。 只要能偵測循環,就能判斷結果。
方法一:HashSet
把每次計算的結果存入 set。 若再次出現 → 進入循環 → False。 若出現 1 → True。
方法二:Floyd 判環(O(1) space)
同 Linked List Cycle 技巧:slow 走一步,fast 走兩步。 若 fast 到達 1 → True。 若 slow == fast(相遇)→ 進入循環 → False。
Floyd 判環視覺化(n=4,非 happy)
slow == fast(循環)→ False
Count Primes
計算小於 n 的質數個數
Input: n = 10
小於 10 的質數:2, 3, 5, 7 → 共 4 個
Sieve of Eratosthenes(埃拉托斯特尼篩法)
建立布林陣列 is_prime[0..n-1],初始全為 True。 從 2 開始,把每個質數的所有倍數標記為 False。 最後數一下還是 True 的個數。
n=20 的篩法過程
初始(2~19)
篩掉 2 的倍數
篩掉 3 的倍數
篩掉 5 的倍數(5²=25>20,結束)
剩餘質數:2,3,5,7,11,13,17,19 → 共 8 個(小於 20)
兩個關鍵優化
- 外層迴圈只需到
√n(若 i > √n,i 的最小倍數 i² 已超過 n) - 內層從
i*i開始標記,而非 2*i(2i 在處理 2 時已標記過了)
Math 解題技巧速查
| 技巧 | 對應題型 | Time | Space |
|---|---|---|---|
| 反轉後半段數字 | #9 Palindrome Number | O(log n) | O(1) |
| 快速冪(迭代) | #50 Pow(x, n) | O(log n) | O(1) |
| HashSet 判循環 | #202 Happy Number | O(log n) | O(log n) |
| Floyd 判環 | #202 Happy Number | O(log n) | O(1) |
| Sieve 篩法 | #204 Count Primes | O(n log log n) | O(n) |
本篇重點回顧
上一篇
EP.21 — Bit Manipulation
XOR、Brian Kernighan、Missing Number
下一篇
EP.23 — 即將推出
敬請期待