LeetCode 含重複元素的子集:迭代去重生成所有子集
題目描述 給定可能包含重複元素的整數數組,返回所有可能的子集(冪集)。解集不能包含重複子集,子集內元素非降序。 迭代去重思路 先排序。維護結果集 res。遍歷
LeetCode 最後一個單詞長度:反向遍歷簡潔解法
題目描述 給定字符串 s,由大小寫字母和空格組成,返回最後一個單詞的長度。單詞定義為非空格字符序列。若不存在返回 0。 正向遍歷法 掃描字符串,遇到非空格且前
LeetCode 文本左右對齊:雙指針逐行填充空格
題目描述 給定單詞列表和行寬 maxWidth,將文本按左右對齊排版。每行盡可能多放單詞,單詞間至少一空格,多餘空格優先分配給左側間隙。最後一行左對齊,單詞間單
LeetCode 修補數組:貪心策略最少添加元素覆蓋範圍
題目描述 給定已排序正整數數組 nums 和整數 n,向數組添加最少元素,使 [1, n] 內每個數都能由數組元素之和組成。返回最少添加次數。 貪心分析 維護
LeetCode 奇偶鏈表:原地重排奇偶節點(O(1) 空間)
題目描述 給定單鏈表,將奇數索引節點(1,3,5...)移至前面,偶數索引節點(2,4,6...)移至後面,保持組內相對順序。要求 O(1) 空間、O(n) 時
LeetCode 119:帕斯卡三角形第 k 行(組合數公式 O(k) 空間)
題目描述 給定索引 k,返回帕斯卡三角形第 k 行(0-indexed)。例如 k=3 返回 [1,3,3,1]。要求只使用 O(k) 額外空間。 方法一:構
LeetCode 172:階乘尾部零的個數(對數時間解法)
題目描述 給定整數 n,返回 n! 末尾 0 的個數。要求對數時間複雜度。 數學洞察 尾部 0 由因子 10 產生,即 2 和 5 配對。階乘中因子 2 遠多
LeetCode 112:路徑總和(遞歸 DFS 判斷根到葉路徑)
題目描述 給定二叉樹根節點和目標和 sum,判斷是否存在從根到葉的路徑,使路徑上節點值之和等於 sum。 遞歸解法 若根為空返回 false。若為葉子節點,判
C++ 實現自動註冊工廠模式:基於映射與 Lambda 的類創建
動機 傳統工廠使用 switch-case 根據鍵創建對象,派生類增多時代碼冗長難維護。自動註冊工廠利用靜態映射,派生類通過宏在加載時自動註冊創建函數,實現開閉
LeetCode 組合生成:遞歸回溯求所有 k 組合
題目描述 給定整數 n 和 k,返回 1...n 中所有可能的 k 個數的組合。 遞歸回溯 從 1 開始嘗試選擇或不選擇當前數字。若已選 k 個,加入結果。若
LeetCode 移動零:原地雙指針保持非零順序
題目描述 給定數組 nums,將所有 0 移動到末尾,同時保持非零元素相對順序。要求原地操作,最小化操作次數。 雙指針單次遍歷 使用 idx 記錄下一個非零元
LeetCode 118:生成帕斯卡三角形(逐行構建)
題目描述 給定行數 numRows,生成帕斯卡三角形的前 numRows 行。每行首尾為 1,中間元素等於上一行對應兩元素之和。 逐行構建算法 初始化結果為空
LeetCode 單詞搜索:矩陣中 DFS 回溯查找路徑
題目描述 在二維字符矩陣中判斷給定單詞是否存在。單詞由相鄰單元格(上下左右)字符順序組成,同一單元格不能重複使用。 DFS 回溯 + 剪枝 從每個單元格作為起
LeetCode 88:合併兩個有序數組(逆向雙指針原地合併)
題目描述 給定兩個已排序整數數組 nums1 和 nums2,將 nums2 合併到 nums1 中,使 nums1 成為有序數組。nums1 有足夠空間容納所
CEF 實現 JavaScript 與 C++ 交互:綁定函數、註冊擴展與執行腳本
Browser 進程與 Render 進程 CEF 基於多進程架構:Browser 進程管理 UI、網絡等;Render 進程負責頁面渲染和 JS 執行。JS
LeetCode 111:二叉樹最小深度(遞歸優化邏輯)
題目描述 給定二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數。 關鍵陷阱 若節點只有一個子節點,最小深度不是 1,而是需沿著非空
LeetCode 子集生成:迭代法構建所有子集
題目描述 給定一個不含重複元素的整數數組,返回其所有可能的子集(冪集)。解集不能包含重複子集。 迭代構建思路 從空集開始。對於每個元素,在現有子集基礎上添加該
LeetCode 43:大整數字符串相乘(模擬手算乘法)
題目描述 以字符串形式給定兩個非負整數,返回它們的乘積(也是字符串)。數字可能任意大,不能直接轉換為內建類型。 模擬手算乘法 結果長度最多為 len1 + l