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

LeetCode 2269: Find the K-Beauty of a Number

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

基本資料
#

難易度: easy 第一次嘗試:2026-01-04

  • 提交紀錄:Runtime Error → Accepted

解題思路
#

把 num 轉成字串,每個長度 k 的子字串就是一個固定視窗。轉回整數後:

  • 是 0 就跳過(0 不是任何數的因數,而且不能拿來除)。
  • 否則看 num % sub == 0。

前導 0 是允許的,int("04") 就是 4。

我的嘗試
#

第一版最後寫成 return len(res),但 res 是計數用的整數,len() 直接 TypeError。改成 return res 就 AC 了。

正確解法
#

class Solution:
    def divisorSubstrings(self, num: int, k: int) -> int:
        s = str(num)
        count = 0
        for right in range(k - 1, len(s)):
            sub = int(s[right - k + 1:right + 1])
            if sub and num % sub == 0:             # 0 不是因數
                count += 1
        return count

num 最多 10 位,每次轉整數的成本可以忽略;如果要嚴格 O(n),可以用 sub = sub * 10 + 新位數 - 舊位數 * 10^k 滾動更新。

複雜度
#

時間 O(n · k),n 是位數,空間 O(n)。

要特別避免的錯誤
#

  • 子字串是 0 時直接拿來除:ZeroDivisionError。
  • 對整數呼叫 len()。

面試口說整理
#

我把數字轉成字串,枚舉每個長度 k 的子字串轉回整數,不是 0 而且能整除 num 就計數。位數最多 10,直接切字串就夠快,要更嚴格可以用滾動的方式更新子字串的值。

相關文章

LeetCode 504: Base 7
·1 分鐘
LeetCode Easy Math String
LeetCode 504 解題筆記:對絕對值不斷取 % 7 和 // 7,最後加上負號並反轉;0 要特別處理
LeetCode 415: Add Strings
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 415 解題筆記:兩個指標從尾巴往前逐位相加,記錄進位,迴圈結束後還有進位要補上
LeetCode 405: Convert a Number to Hexadecimal
·1 分鐘
LeetCode Easy Math String Bit-Manipulation
LeetCode 405 解題筆記:負數先加上 2^32 變成補數,再每次取 4 個位元(% 16)轉成十六進位;0 要特別處理
LeetCode 412: Fizz Buzz
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 412 解題筆記:先判斷 15 的倍數,再判斷 5 和 3;倍數要用 %,不是 //
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