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

LeetCode 2094: Finding 3-Digit Even Numbers

·1 分鐘· ·
LeetCode Easy Hash-Table Enumeration Array
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2025-05-12

  • 提交紀錄:Wrong Answer → Accepted

解題思路
#

三位偶數只有 450 個(100 到 998),反過來枚舉答案比較簡單(Hash Table 模板一):

  • 數每個數字有幾個可以用:have = Counter(digits)。
  • 對每個候選數 x,數它需要的數字:need = Counter(str(x))。
  • need - have 只留下「需要比有的多」的部分,是空的就代表夠用。

枚舉本身由小到大,結果自動排好、不會重複。

我的嘗試
#

我當時用三層迴圈枚舉 counter 的 key 組三個位數,再用條件排除數字不夠的情況。第一版的條件 (j == k and counter[i] < 2) 寫錯變數,應該檢查 counter[j]。例如 [3, 2, 2]:答案是 [232, 322],322 的後兩位都是 2,這版拿 3 的個數去判斷,漏掉了它。改成 counter[j] 就 AC 了。

正確解法
#

class Solution:
    def findEvenNumbers(self, digits: List[int]) -> List[int]:
        have = Counter(map(str, digits))
        return [x for x in range(100, 1000, 2) if not Counter(str(x)) - have]

複雜度
#

時間 O(450 × 3 + n),也就是 O(n),空間 O(1)(最多 10 種數字)。

要特別避免的錯誤
#

  • 三層迴圈組合時,判斷重複次數要用對應位置的變數。
  • Counter 的 key 型別要一致:一邊是字串,另一邊也要是字串。

面試口說整理
#

三位偶數只有 450 個,所以我反過來枚舉 100 到 998 的偶數,數它需要哪些數字各幾個,跟手上的數字比,Counter 相減是空的就代表夠用。由小到大枚舉,結果已經排好也不會重複。

相關文章

LeetCode 3487: Maximum Unique Subarray Sum After Deletion
·1 分鐘
LeetCode Easy Greedy Hash-Table Array
LeetCode 3487 解題筆記:可以任意刪除,所以等於挑不重複的值;非負的全拿,全是負數時只拿最大的一個
LeetCode 2099: Find Subsequence of Length K With the Largest Sum
·1 分鐘
LeetCode Easy Array Hash-Table Sorting Heap-Priority-Queue
LeetCode 2099 解題筆記:選出最大的 k 個數(連同 index),再按 index 排回原本的順序
LeetCode 2357: Make Array Zero by Subtracting Equal Amounts
·1 分鐘
LeetCode Easy Array Hash-Table Greedy Sorting
LeetCode 2357 解題筆記:每次操作會讓最小的正數那一群變成 0,所以次數就是不同的正數有幾種
LeetCode 1122: Relative Sort Array
·1 分鐘
LeetCode Easy Array Hash-Table Sorting Counting-Sort
LeetCode 1122 解題筆記:計數後先按照 arr2 的順序輸出,剩下的數由小到大接在後面
LeetCode 1128: Number of Equivalent Domino Pairs
·1 分鐘
LeetCode Easy Array Hash-Table Counting
LeetCode 1128 解題筆記:把每張骨牌正規化成 (小, 大) 當 key 計數,每個 key 有 c 張就有 c(c - 1) / 2 對
LeetCode 1002: Find Common Characters
·1 分鐘
LeetCode Easy Array Hash-Table String
LeetCode 1002 解題筆記:每個單字各自計數,對所有 Counter 取交集(每個字元取最小次數),再展開