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

LeetCode 258: Add Digits

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

基本資料
#

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

  • 提交紀錄:Runtime Error ×2 → Accepted ×4

解題思路
#

直接模擬:位數和不是個位數就繼續加(Math 模板五)。進階要求 O(1):一個數跟它的位數和除以 9 的餘數相同(因為 10 ≡ 1 (mod 9)),所以最後剩下的個位數就是 n mod 9,只是 9 的倍數要回傳 9 而不是 0:0 if n == 0 else 1 + (n - 1) % 9。

我的嘗試
#

前兩版都是 sum(list(str(num))),加的是字元(TypeError),第一版還把參數名稱寫成 nums。改成先轉 int 就 AC 了,2025 年又用 Python 和 C++ 各寫了一次。每次都是模擬,沒有用公式。

正確解法
#

class Solution:
    def addDigits(self, num: int) -> int:
        return 0 if num == 0 else 1 + (num - 1) % 9

複雜度
#

時間 O(1),空間 O(1)。

要特別避免的錯誤
#

  • sum(list(str(n))) 加的是字元,要先轉成 int。
  • 公式要處理 0 和 9 的倍數。

面試口說整理
#

直接做是反覆把位數相加;O(1) 的做法是一個數和它的位數和除以 9 同餘,所以答案是 1 + (n - 1) % 9,n 是 0 時回傳 0。

相關文章

LeetCode 67: Add Binary
·1 分鐘
LeetCode Easy Math String Bit-Manipulation Simulation
LeetCode 67 解題筆記:從兩個字串的尾巴往前逐位相加,進位是 sum // 2,這一位是 sum % 2
LeetCode 231: Power of Two
·1 分鐘
LeetCode Easy Math Bit-Manipulation Recursion
LeetCode 231 解題筆記:2 的次方只有一個位元是 1,n & (n - 1) 會把最低的 1 消掉,結果是 0 就是;n 要是正數
LeetCode 171: Excel Sheet Column Number
·1 分鐘
LeetCode Easy Math String
LeetCode 171 解題筆記:從左到右 res = res × 26 + 字母的值(A = 1)
LeetCode 202: Happy Number
·1 分鐘
LeetCode Easy Hash-Table Math Two-Pointers Floyds-Cycle-Finding-Algorithm
LeetCode 202 解題筆記:一直取位數平方和,會走到 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 69: Sqrt(x)
·1 分鐘
LeetCode Easy Math Binary-Search Newtons-Method
LeetCode 69 解題筆記:找最大的 mid 讓 mid² <= x;閉區間二分結束時 r 就是答案