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

LeetCode 3959: Check Good Integer

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

基本資料
#

難易度: easy 第一次嘗試:2026-06-14

  • 提交紀錄:Accepted(一次通過)

解題思路
#

squareSum - digitSum 可以拆成每個位數各自貢獻 d² - d。因為 d 是 0~9 的整數,d² - d = d(d - 1) >= 0,差距只會越來越大,所以累積到 >= 50 就可以直接回傳 True。

我的解法
#

class Solution:
    def checkGoodInteger(self, n: int) -> bool:
        gap = 0
        while n:
            d = n % 10
            gap += d * d - d                 # 每個位數的貢獻 >= 0
            if gap >= 50:
                return True
            n //= 10
        return False

我當時分開記 sum_ 和 sSum,再比較差;合成一個 gap 是一樣的。

複雜度
#

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

要特別避免的錯誤
#

  • 提早回傳要先確認累積值是單調的;如果某個位數的貢獻可能是負的,就不能中途下結論。

面試口說整理
#

差距等於每個位數 d² - d 的總和,而這個值永遠不是負的,所以我邊走邊累積,到 50 就回傳 True,走完還沒到就是 False。時間 O(d)。

相關文章

LeetCode 1103: Distribute Candies to People
·1 分鐘
LeetCode Easy Math Simulation
LeetCode 1103 解題筆記:模擬一輪一輪發糖果,第 i 次發 i + 1 顆,不夠時把剩下的全給目前這個人
LeetCode 415: Add Strings
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 415 解題筆記:兩個指標從尾巴往前逐位相加,記錄進位,迴圈結束後還有進位要補上
LeetCode 412: Fizz Buzz
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 412 解題筆記:先判斷 15 的倍數,再判斷 5 和 3;倍數要用 %,不是 //
LeetCode 258: Add Digits
·1 分鐘
LeetCode Easy Math Simulation Number-Theory
LeetCode 258 解題筆記:反覆把位數相加直到剩一位;O(1) 解法是 digital root:1 + (n - 1) % 9
LeetCode 67: Add Binary
·1 分鐘
LeetCode Easy Math String Bit-Manipulation Simulation
LeetCode 67 解題筆記:從兩個字串的尾巴往前逐位相加,進位是 sum // 2,這一位是 sum % 2
LeetCode 3908: Valid Digit Number
·1 分鐘
LeetCode Easy Math
LeetCode 3908 解題筆記:轉成字串,檢查包含 x 而且不是以 x 開頭