文章
- LeetCode 筆記 - 199. Binary Tree Right Side View 要求回傳二元樹從右側觀察到的視圖節點。本文運用廣度優先搜尋(BFS)進行層序遍歷,並精確搜集每一層最後出現的節點。這是一個理解如何透過層級探索來提取樹狀結構視覺屬性的經典實作案例。
- LeetCode 筆記 - 38. Count and Say 針對 LeetCode 第 38 題「外觀數列」,本文教學如何根據規則進行字串編碼。解題核心在於準確描述上一個數列的組成情況,並轉換為新的字串表示。這是一篇掌握基礎字串遍歷、計數與模擬邏輯的實作隨筆。
- LeetCode 筆記 - 9. Palindrome Number 判定輸入數字是否為迴文。雖然可以透過數學運算取位數比對,本文分享更簡潔的 Python 風格寫法:將數字轉換為字串後,直接與其反轉版本進行比對。內容精簡直觀,適合掌握基本字串操作與邏輯判定。
- LeetCode 筆記 - 746. Min Cost Climbing Stairs 解析「使用最小花費爬樓梯」問題。本文展示動態規劃(DP)的基礎應用,透過從過去兩階中挑選成本較小的路徑來累加當前花費。這種逐步推導全域最優解的方式,非常適合初學者鞏固對 DP 狀態轉移與查表法的理解。
- LeetCode 筆記 - 1696. Jump Game VI 挑戰跳跳遊戲系列第六題,尋找路徑最高得分。雖然題目複雜度較高,本文分享利用最大堆積(Max Heap)優化搜尋過程的技巧:動態保存過去 k 個步驟中的最大分數,大幅提升動態規劃在長視窗下的執行效率。
- LeetCode 筆記 - 1306. Jump Game III 跳跳遊戲系列第三題,判定是否能跳至數值為 0 的位置。本文結合深度優先搜尋(DFS)與走訪記錄技巧,防止程式陷入無限循環。透過條件式的路徑探索,引導讀者掌握帶有特殊移動規則的圖形走訪判定邏輯。
- LeetCode 筆記 - 206. Reverse Linked List LeetCode 必考基礎題,實作鏈結串列的反轉。本文介紹一種直覺的指針變更策略:透過維護一個「前一節點」的參數,在遍歷過程中逐步調整 next 指針的指向。這是一篇掌握鏈結串列結構重組核心邏輯的必讀筆記。
- LeetCode 筆記 - 92. Reverse Linked List II 要求反轉鏈結串列中指定範圍內的節點。本文分享利用列表輔助處理的簡化策略,雖然在空間複雜度上有權衡,但極大地降低了指針操作的複雜度與出錯率。這是一篇針對鏈結串列局部重組問題的實務開發隨筆。
- LeetCode 筆記 - 265. Paint House II 延續粉刷房子的概念,本題將顏色種類擴展至 k 種。解題思維同樣基於動態規劃,但需要處理更廣泛的顏色選擇範圍。本文解析如何在增加顏色靈活度的同時,依然保持演算法的執行效率,是進階動態規劃應用的優質練習。
- LeetCode 筆記 - 256. Paint House 解析 LeetCode 經典題「粉刷房子」。本文探討如何在顏色不相鄰的限制下,運用動態規劃(DP)找出粉刷所有房子的最低成本。透過建立狀態轉移方程,逐層累加當前顏色的最優解,是理解 DP 處理相鄰約束問題的入門首選。
- LeetCode 筆記 - 509. Fibonacci Number LeetCode 費氏數列計算解析。本文展示如何利用動態規劃(DP)與查表法(Memoization)來儲存中間計算結果,避免傳統遞迴導致的重複運算與效能浪費。這是一篇理解遞迴優化與動態規劃入門的最佳實踐筆記。
- LeetCode 筆記 - 100. Same Tree 針對判定兩棵二元樹是否完全相同的 LeetCode 題目進行解析。本文採用同步遞迴走訪兩棵樹的策略,逐一比對每個節點的值與結構。這是一篇幫助讀者掌握樹走訪(Tree Traversal)與基礎遞迴判別邏輯的入門教學。
- LeetCode 筆記 - 64. Minimum Path Sum 尋找矩陣中從左上到右下的最小路徑成本。這是一個純粹且經典的動態規劃(DP)問題。本文引導讀者建立路徑成本矩陣,透過逐一選取上方或左方較小的路徑值進行累加,最終在 O(M * N) 時間內得出全域最優解。
- LeetCode 筆記 - 128. Longest Consecutive Sequence 挑战在無序數列中尋找最長連續子序列,且要求在 O(N) 線性時間內完成。本文分享透過哈希集合快速定位連續區間起點與延伸方向的技巧,是一篇探討如何繞過傳統排序限制、利用空間換取查詢效率的高階演算法心得。
- LeetCode 筆記 - 61. Rotate List 挑戰在不轉換為列表的情況下對鏈結串列進行向右旋轉。本文教學如何精確操作指針,透過斷開特定節點並將原尾端重新連接至頭部,達成 O(1) 額外空間的結構變更。這是一篇掌握鏈結串列結構變更細節與循環連接技巧的實務筆記。
- LeetCode 筆記 - 135. Candy 解析 LeetCode 困難題「分發糖果」。解題邏輯聚焦於將複雜的山形分佈拆解為左、右兩個獨立的山坡進行計算,最後取兩者最大值。本文展示如何將看似棘手的全局最優化問題分解為局部的線性掃描,達成優美且高效的解決方案。
- LeetCode 筆記 - 45. Jump Game II 跳跳遊戲系列第二題,尋找抵達終點的最小步數。本文解析如何運用動態規劃(DP)紀錄每個位置的最短步數,透過局部覆蓋範圍的持續更新,在 O(N) 或 O(N^2) 複雜度下收斂出最優路徑,是理解路徑優化問題的經典範例。
- LeetCode 筆記 - 376. Wiggle Subsequence 解析如何尋找最長的波動序列。本文分享三種不同的解題軌跡,探討如何動態追蹤數列的一上一下長度變化。核心概念在於靈活處理可跳過的元素,讓讀者能從不同複雜度的實作中掌握波動序列計數的精髓。
- LeetCode 筆記 - 55. Jump Game 跳跳遊戲系列首題,判定是否能抵達數列終點。本文警告讀者避免落入動態規劃的複雜度陷阱,改採只需紀錄「最遠可抵達位置」的貪婪思維。這種線性掃描法能以極高的效率完成判定,是學習貪婪策略與範圍判斷的優質案例。
- LeetCode 筆記 - 515. Find Largest Value in Each Tree Row 要求找出二元樹中每一層的最大值。本文運用廣度優先搜尋(BFS)走訪每一層節點,並在每層迭代中紀錄下最高數值。這展示了層序遍歷在處理樹狀結構層次屬性統計時的直覺應用。
- LeetCode 筆記 - 43. Multiply Strings 要求在不直接調用 Python 內建 int() 的情況下實現大數相乘字串。本文分享如何自定義字元與數字的映射表,親手實作字串到數值的轉換與運算邏輯。這是一篇回歸計算機基礎運算原理,鍛鍊開發者處理原始字串解析能力的筆記。
- LeetCode 筆記 - 1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts 計算蛋糕切割後的最大區域面積。本文指出問題核心在於分別找出橫向與縱向切割中的最大跨度。透過對切割座標進行排序並計算最大差值,最後相乘即可得出結果。這是一篇關於維度分解與排序應用實務的筆記。
- LeetCode 筆記 - 1710. Maximum Units on a Truck 針對卡車裝載問題,本文展示貪婪演算法(Greedy Algorithm)的應用。透過優先挑選單位容量最大的盒子,能在有限的卡車空間內達成裝載價值的最大化。這是一篇引導讀者理解如何透過局部最佳化推導出全域最佳解的基礎實作。
- LeetCode 筆記 - 462. Minimum Moves to Equal Array Elements II 相較於前一題,本題允許加一或減一。本文解析為什麼「將所有數字帶向平均值」並非最優策略,並引入「中位數」作為相遇點的核心概念。透過數學推導與實作驗證,展示了中位數在最小化總移動成本問題中的關鍵作用。
- LeetCode 筆記 - 453. Minimum Moves to Equal Array Elements 針對讓數列元素相等的最小移動次數,本文分享一個巧妙的邏輯轉化:將「n-1 個數字加一」視為「選定一個數字減一」。透過此轉變,問題變成了將所有數字降至最小值的累計次數,極大地簡化了計算難度與程式複雜度。
- LeetCode 筆記 - 406. Queue Reconstruction by Height 挑戰根據身高與排隊限制重建隊伍。本文跳出官方建議的從矮開始思考,改採從高處著手的策略:先對身高進行降序排列,再根據排隊條件插入對應位置。這展現了在處理具備相互依賴關係的排序問題時,選擇正確處理順序的重要性。
- LeetCode 筆記 - 69. Sqrt(x) 實作求取整數平方根的功能。本文解析如何運用二元搜尋(Binary Search)在 0 到 x 的範圍內快速逼近目標值。這展示了二元搜尋不僅可用於數列尋找,也能應用在數學函數的根值逼近任務中,提供極高的計算效率。
- LeetCode 筆記 - 1647. Minimum Deletions to Make Character Frequencies 要求透過最少刪除次數,讓字串中每個字母的出現頻率各不相同。解題思路聚焦於統計頻率後,動態降低重複出現的頻率值,直到找到唯一的空位。這是一篇關於資料統計、集合過濾與動態調整邏輯的實戰分享。
- LeetCode 筆記 - 210. Course Schedule II 延續課程安排問題,本題要求給出一組可行的修課順序。解法核心同樣基於 DFS 進行環偵測,並利用遞迴結束的順序來搜集節點。這是一篇深入探討拓撲排序原理的筆記,教導開發者如何在解決依賴關係問題的同時建立正確的處理順序。
- LeetCode 筆記 - 207. Course Schedule 在選修課程與先修限制中判斷是否有衝突。這題本質上是圖論中的「環偵測」問題。本文分享如何運用深度優先搜尋(DFS)遍歷節點,並透過路徑標記來識別是否存在循環依賴(Cycle),是學習拓撲排序與圖形走訪的重要基礎。