LeetCode 學習平台

150 題完整收錄 | Python & C++ & Java 詳解

150
總題數
55
Easy
71
Medium
24
Hard
難度篩選

Array & Two Pointers

#1
Easy
Two Sum
給定一個整數陣列和目標值,找出陣列中兩個數字相加等於目標值的索引位置。
ArrayHash Table
#26
Easy
Remove Duplicates from Sorted Array
從已排序陣列中移除重複元素,使用雙指標原地操作。
ArrayTwo Pointers
#27
Easy
Remove Element
移除陣列中所有等於給定值的元素,使用雙指標原地操作。
ArrayTwo Pointers
#35
Easy
Search Insert Position
在已排序陣列中找到目標值的索引,若不存在則返回插入位置。
ArrayBinary Search
#66
Easy
Plus One
對以陣列表示的非負整數加一。
ArrayMath
#88
Easy
Merge Sorted Array
合併兩個已排序陣列,使用雙指標從後往前填充。
ArrayTwo PointersSorting
#118
Easy
Pascal's Triangle
生成楊輝三角的前 n 行。
ArrayDynamic Programming
#119
Easy
Pascal's Triangle II
返回楊輝三角的第 k 行,空間優化版本。
ArrayDynamic Programming
#167
Easy
Two Sum II - Input Array Is Sorted
在已排序陣列中找出兩數之和,使用雙指標。
ArrayTwo PointersBinary Search
#169
Easy
Majority Element
找出出現次數超過一半的元素,使用 Boyer-Moore 投票算法。
ArrayHash TableDivide and Conquer
#217
Easy
Contains Duplicate
判斷陣列中是否有重複元素,使用集合。
ArrayHash TableSorting
#268
Easy
Missing Number
找出缺失的數字,使用數學公式或 XOR。
ArrayMathBit Manipulation
#283
Easy
Move Zeroes
將陣列中的 0 移到末尾,保持非零元素順序。
ArrayTwo Pointers
#350
Easy
Intersection of Two Arrays II
找出兩個陣列的交集,包含重複元素。
ArrayHash TableTwo Pointers
#704
Easy
Binary Search
標準二分搜尋實現。
ArrayBinary Search
#11
Medium
Container With Most Water
找出可以容納最多水的兩條線,使用雙指標技巧。
ArrayTwo PointersGreedy
#15
Medium
3Sum
找出陣列中所有總和為 0 的三元組,使用排序和雙指標。
ArrayTwo PointersSorting
#33
Medium
Search in Rotated Sorted Array
在旋轉排序陣列中搜尋目標值,使用二分搜尋。
ArrayBinary Search
#34
Medium
Find First and Last Position of Element
在已排序陣列中找出目標值的起始和結束位置。
ArrayBinary Search
#48
Medium
Rotate Image
將 n×n 矩陣順時針旋轉 90 度,要求原地操作。
ArrayMatrix
#53
Medium
Maximum Subarray
找出最大子陣列和,使用 Kadane 算法。
ArrayDynamic ProgrammingDivide and Conquer
#54
Medium
Spiral Matrix
按螺旋順序返回矩陣的所有元素。
ArrayMatrixSimulation
#75
Medium
Sort Colors
對包含 0、1、2 的陣列進行原地排序,使用荷蘭國旗問題算法。
ArrayTwo PointersSorting
#189
Medium
Rotate Array
旋轉陣列 k 步,使用反轉算法。
ArrayMathTwo Pointers
#238
Medium
Product of Array Except Self
計算除自身以外陣列的乘積,不使用除法。
ArrayPrefix Sum
#240
Medium
Search a 2D Matrix II
在行列均已排序的矩陣中搜尋目標值。
ArrayBinary SearchMatrix
#287
Medium
Find the Duplicate Number
找出陣列中的重複數字,使用快慢指標。
ArrayTwo PointersBinary Search
#4
Hard
Median of Two Sorted Arrays
找出兩個已排序陣列的中位數,時間複雜度要求 O(log(m+n))。
ArrayBinary SearchDivide and Conquer
#41
Hard
First Missing Positive
找出缺失的最小正整數,要求 O(n) 時間和 O(1) 空間。
ArrayHash Table
#42
Hard
Trapping Rain Water
計算可以接住的雨水量,使用雙指標或動態規劃。
ArrayTwo PointersDynamic Programming
#135
Hard
Candy
分糖果問題,使用貪心算法的雙向掃描策略。
ArrayGreedy
#56
Medium
Merge Intervals
合併所有重疊的區間,排序後貪心掃描一次即可。
ArraySortingInterval
#57
Medium
Insert Interval
在已排序不重疊的區間中插入新區間並合併,三階段線性掃描。
ArrayIntervalGreedy
#153
Medium
Find Minimum in Rotated Sorted Array
在旋轉排序陣列中用二分搜尋找出最小元素。
ArrayBinary Search
#162
Medium
Find Peak Element
在無序陣列中用二分搜尋找出任意一個峰值元素。
ArrayBinary Search
#560
Medium
Subarray Sum Equals K
統計和為 k 的連續子陣列個數,前綴和加雜湊表。
ArrayHash TablePrefix Sum

String

#28
Easy
Find the Index of the First Occurrence
在字串中找到第一個匹配子字串的索引,KMP 算法。
StringTwo Pointers
#38
Easy
Count and Say
外觀數列,迭代生成每一項,讀出數字的個數和數字本身。
StringSimulation
#58
Easy
Length of Last Word
返回字串中最後一個單詞的長度。
String
#67
Easy
Add Binary
計算兩個二進制字串的和。
MathStringBit Manipulation
#125
Easy
Valid Palindrome
判斷字串是否為回文,忽略大小寫和非字母數字字符。
Two PointersString
#171
Easy
Excel Sheet Column Title
將數字轉換為 Excel 欄位標題,26 進制轉換。
MathString
#205
Easy
Isomorphic Strings
判斷兩個字串是否同構,使用哈希表映射。
Hash TableString
#242
Easy
Valid Anagram
判斷兩個字串是否為字母異位詞。
Hash TableStringSorting
#344
Easy
Reverse String
反轉字串,使用雙指標原地操作。
Two PointersString
#387
Easy
First Unique Character in a String
找出字串中第一個不重複的字符索引。
Hash TableStringQueue
#412
Easy
Fizz Buzz
經典 FizzBuzz 問題,根據規則輸出字串。
MathStringSimulation
#3
Medium
Longest Substring Without Repeating Characters
找出最長無重複字符子字串,使用滑動視窗。
Hash TableStringSliding Window
#5
Medium
Longest Palindromic Substring
找出最長回文子字串,使用中心擴展或動態規劃。
StringDynamic Programming
#49
Medium
Group Anagrams
將字母異位詞分組,使用哈希表和排序。
Hash TableStringSorting
#91
Medium
Decode Ways
計算數字字串的解碼方法總數,使用動態規劃。
StringDynamic Programming
#139
Medium
Word Break
判斷字串是否可以被拆分成字典中的單詞,使用動態規劃。
Hash TableStringDynamic Programming
#10
Hard
Regular Expression Matching
實現正則表達式匹配,支援 '.' 和 '*',使用動態規劃。
StringDynamic ProgrammingRecursion
#32
Hard
Longest Valid Parentheses
找出最長有效括號子字串的長度,使用動態規劃或堆疊。
StringDynamic ProgrammingStack
#44
Hard
Wildcard Matching
實現萬用字符匹配,支援 '?' 和 '*',使用動態規劃。
StringDynamic ProgrammingGreedy
#72
Hard
Edit Distance
計算兩個字串的最小編輯距離,使用動態規劃。
StringDynamic Programming
#76
Hard
Minimum Window Substring
找出包含所有目標字符的最小子字串,使用滑動視窗。
Hash TableStringSliding Window
#14
Easy
Longest Common Prefix
尋找字串陣列中的最長公共前綴,縱向掃描或排序取頭尾。
StringTrie
#8
Medium
String to Integer (atoi)
實作字串轉整數,重點在溢位的事前預判與邊界處理。
StringSimulation
#151
Medium
Reverse Words in a String
反轉字串中單詞的順序,可用「整體反轉再逐詞反轉」達到 O(1) 空間。
StringTwo Pointers
#43
Medium
Multiply Strings
不用大數函式庫實作字串大數乘法,關鍵是 i+j 定位法。
StringMathSimulation
#392
Easy
Is Subsequence
判斷 s 是否為 t 的子序列,雙指標貪心;大量查詢時改用預處理加二分。
Two PointersStringDP

Hash Table

#136
Easy
Single Number
找出陣列中只出現一次的數字,使用 XOR 位元運算。
ArrayBit Manipulation
#202
Easy
Happy Number
判斷是否為快樂數,使用快慢指標檢測循環。
Hash TableMathTwo Pointers
#128
Medium
Longest Consecutive Sequence
找出最長連續序列的長度,要求 O(n) 時間。
ArrayHash TableUnion Find
#347
Medium
Top K Frequent Elements
找出前 K 個高頻元素,使用堆積或桶排序。
ArrayHash TableHeapBucket Sort

Tree

#101
Easy
Symmetric Tree
判斷二元樹是否鏡像對稱,使用遞迴或迭代。
TreeDFSBFS
#104
Easy
Maximum Depth of Binary Tree
計算二元樹的最大深度。
TreeDFSBFS
#112
Easy
Path Sum
判斷是否存在根到葉的路徑和等於目標值。
TreeDFSBFS
#226
Easy
Invert Binary Tree
翻轉二元樹,使用遞迴或迭代。
TreeDFSBFS
#98
Medium
Validate Binary Search Tree
驗證是否為有效的二元搜尋樹。
TreeDFSBST
#102
Medium
Binary Tree Level Order Traversal
二元樹的層序遍歷,使用佇列實現 BFS。
TreeBFS
#124
Hard
Binary Tree Maximum Path Sum
找出二元樹中的最大路徑和,使用後序遍歷。
TreeDFSDynamic Programming
#297
Hard
Serialize and Deserialize Binary Tree
序列化和反序列化二元樹,使用前序遍歷。
TreeDFSBFSDesign
#94
Easy
Binary Tree Inorder Traversal
二元樹中序遍歷,遞迴、堆疊迭代與 O(1) 空間的 Morris 遍歷。
TreeStackDFS
#236
Medium
Lowest Common Ancestor of a Binary Tree
普通二元樹的最近公共祖先,後序遍歷往上回報。
TreeDFSRecursion
#235
Medium
Lowest Common Ancestor of a BST
利用 BST 的大小關係,只走一條路徑就能找到 LCA。
TreeBSTDFS
#105
Medium
Construct Binary Tree from Preorder and Inorder
由前序與中序遍歷重建二元樹,前序給根、中序給左右分界。
TreeDivide and ConquerHash Table
#110
Easy
Balanced Binary Tree
判斷是否為高度平衡二元樹,自底向上一趟遍歷即可 O(n)。
TreeDFSRecursion
#543
Easy
Diameter of Binary Tree
求樹的直徑,樹型 DP 的「回傳值與答案分離」經典題。
TreeDFSRecursion
#199
Medium
Binary Tree Right Side View
從右側看二元樹,BFS 取每層最後一個或 DFS 先右後左。
TreeBFSDFS

Linked List

#21
Easy
Merge Two Sorted Lists
合併兩個已排序的鏈結串列成一個新的已排序串列。
Linked ListRecursion
#83
Easy
Remove Duplicates from Sorted List
從已排序鏈結串列中移除重複元素。
Linked List
#141
Easy
Linked List Cycle
判斷鏈結串列是否有環,使用快慢指標。
Linked ListTwo Pointers
#206
Easy
Reverse Linked List
反轉鏈結串列,使用迭代或遞迴。
Linked ListRecursion
#2
Medium
Add Two Numbers
將兩個非空鏈結串列中儲存的數字相加,每個節點包含一位數字。
Linked ListMath
#23
Hard
Merge k Sorted Lists
合併 k 個已排序的鏈結串列,使用最小堆積優化。
Linked ListHeapDivide and Conquer
#25
Hard
Reverse Nodes in k-Group
每 k 個節點一組進行翻轉鏈結串列,要求 O(1) 空間。
Linked ListRecursion
#146
Hard
LRU Cache
實現 LRU 快取機制,使用雙向鏈結串列和哈希表。
Hash TableLinked ListDesign
#19
Medium
Remove Nth Node From End of List
一趟掃描刪除倒數第 n 個節點,快慢指標加 dummy 節點。
Linked ListTwo Pointers
#142
Medium
Linked List Cycle II
找出環的入口節點,Floyd 判圈演算法與完整數學證明。
Linked ListTwo Pointers
#160
Easy
Intersection of Two Linked Lists
找兩條串列的交點,用「走完自己走對方」消除長度差。
Linked ListTwo Pointers
#234
Easy
Palindrome Linked List
判斷串列是否回文,找中點加反轉後半段達到 O(1) 空間。
Linked ListTwo PointersStack
#138
Medium
Copy List with Random Pointer
含隨機指標的串列深拷貝,HashMap 對照或節點交錯編織。
Linked ListHash Table
#148
Medium
Sort List
對鏈結串列排序,合併排序在串列上可達 O(n log n) 與 O(1) 空間。
Linked ListSortingMerge Sort

Dynamic Programming

#70
Easy
Climbing Stairs
爬樓梯的方法數,經典動態規劃入門題。
MathDynamic ProgrammingMemoization
#121
Easy
Best Time to Buy and Sell Stock
只能交易一次的股票最大利潤。
ArrayDynamic Programming
#62
Medium
Unique Paths
計算從左上到右下的不同路徑數,使用動態規劃。
MathDynamic ProgrammingCombinatorics
#64
Medium
Minimum Path Sum
找出從左上到右下的最小路徑和。
ArrayDynamic ProgrammingMatrix
#122
Medium
Best Time to Buy and Sell Stock II
可以進行多次交易的股票最大利潤,貪心算法。
ArrayGreedyDynamic Programming
#198
Medium
House Robber
打家劫舍問題,使用動態規劃。
ArrayDynamic Programming
#279
Medium
Perfect Squares
找出和為 n 的最少完全平方數,使用動態規劃或 BFS。
MathDynamic ProgrammingBFS
#300
Medium
Longest Increasing Subsequence
找出最長遞增子序列的長度,使用 DP 或二分搜尋。
ArrayBinary SearchDynamic Programming
#322
Medium
Coin Change
找出湊成總金額的最少硬幣數,使用動態規劃。
ArrayDynamic ProgrammingBFS
#416
Medium
Partition Equal Subset Sum
判斷是否可以將陣列分成兩個和相等的子集,0-1 背包問題。
ArrayDynamic Programming
#45
Hard
Jump Game II
計算跳躍到最後位置的最小次數,使用貪心算法。
ArrayGreedyDynamic Programming
#85
Hard
Maximal Rectangle
在二進制矩陣中找出最大矩形,將 2D 問題轉化為多個 1D 柱狀圖。
ArrayDynamic ProgrammingStack
#188
Hard
Best Time to Buy and Sell Stock IV
最多 k 次交易的股票最大利潤,狀態機 DP。
ArrayDynamic Programming
#312
Hard
Burst Balloons
戳氣球問題,區間 DP 經典題,反向思考最後戳哪個。
ArrayDynamic Programming
#213
Medium
House Robber II
環狀排列的打家劫舍,拆環成兩個線性子問題。
DPArray
#63
Medium
Unique Paths II
有障礙物的網格路徑計數,矩陣 DP 與邊界處理。
DPMatrix
#1143
Medium
Longest Common Subsequence
最長公共子序列,二維字串 DP 的模板題,也是 diff 工具的核心。
DPString
#221
Medium
Maximal Square
矩陣中全為 1 的最大正方形,dp = min(左, 上, 左上) + 1。
DPMatrix

Stack & Queue

#20
Easy
Valid Parentheses
驗證括號字串是否有效,使用堆疊資料結構。
StringStack
#155
Medium
Min Stack
設計支援 O(1) 時間獲取最小值的堆疊。
StackDesign
#739
Medium
Daily Temperatures
找出下一個更高溫度的天數,使用單調棧。
ArrayStackMonotonic Stack
#84
Hard
Largest Rectangle in Histogram
找出柱狀圖中的最大矩形面積,使用單調棧。
ArrayStackMonotonic Stack
#239
Hard
Sliding Window Maximum
找出滑動視窗的最大值,使用單調雙端佇列。
ArrayQueueSliding WindowMonotonic Queue
#150
Medium
Evaluate Reverse Polish Notation
逆波蘭表達式求值,一個堆疊搞定,也是堆疊式虛擬機的原理。
StackMath
#215
Medium
Kth Largest Element in an Array
找第 k 大元素,最小堆積 O(n log k) 或快速選擇平均 O(n)。
HeapQuickselectSorting

DFS & BFS

#200
Medium
Number of Islands
計算島嶼數量,使用 DFS 或 BFS。
ArrayDFSBFSUnion Find
#127
Hard
Word Ladder
找出單詞接龍的最短轉換序列長度,使用 BFS。
Hash TableStringBFS
#329
Hard
Longest Increasing Path in a Matrix
矩陣中的最長遞增路徑,DFS + 記憶化搜尋。
ArrayDFSMemoizationMatrix

Backtracking

#79
Medium
Word Search
在字母矩陣中搜尋單詞,使用回溯法。
ArrayBacktrackingMatrix
#37
Hard
Sudoku Solver
使用回溯法解決數獨問題,填充所有空格。
BacktrackingArrayHash Table
#51
Hard
N-Queens
經典 N 皇后問題,使用回溯法找出所有解法。
BacktrackingArray
#46
Medium
Permutations
全排列,回溯法的入門模板題。
BacktrackingArray
#78
Medium
Subsets
所有子集(冪集),回溯或位元遮罩兩種解法。
BacktrackingBit Manipulation
#39
Medium
Combination Sum
元素可重複使用的組合總和,關鍵在遞迴傳 i 而非 i+1。
BacktrackingArray
#22
Medium
Generate Parentheses
生成所有合法括號組合,邊生成邊剪枝,答案數為卡塔蘭數。
BacktrackingString
#17
Medium
Letter Combinations of a Phone Number
電話號碼的字母組合,每層選擇列表不同的回溯。
BacktrackingStringHash Table

Math

#9
Easy
Palindrome Number
判斷一個整數是否為回文數,不使用字串轉換。
Math
#69
Easy
Sqrt(x)
實現 sqrt(x) 函數,返回 x 的平方根的整數部分。
MathBinary Search
#326
Easy
Power of Three
判斷一個整數是否為 3 的冪次方。
MathRecursion

Bit Manipulation(位元運算 · 韌體必考)

#191
Easy
Number of 1 Bits
計算二進位中 1 的個數,n & (n-1) 與查表法,韌體面試第一題。
Bit Manipulation
#190
Easy
Reverse Bits
顛倒 32 位元整數的位元,分治遮罩法與查表優化。
Bit ManipulationDivide and Conquer
#231
Easy
Power of Two
判斷是否為 2 的冪,一行 n & (n-1) == 0 搞定。
Bit ManipulationMath
#338
Easy
Counting Bits
計算 0~n 每個數的 1 的個數,位元題也能用 DP。
Bit ManipulationDP
#461
Easy
Hamming Distance
兩數的漢明距離,XOR 後數 1,ECC 錯誤更正碼的基礎。
Bit Manipulation
#137
Medium
Single Number II
其餘出現三次,找出現一次的數,位元計數或狀態機。
Bit ManipulationArray
#260
Medium
Single Number III
有兩個只出現一次的數,XOR 加 lowbit 分組。
Bit ManipulationArray
#371
Medium
Sum of Two Integers
不用 + 和 - 做加法,本質是用位元運算實作全加器。
Bit ManipulationMath
#201
Medium
Bitwise AND of Numbers Range
區間內所有數的按位 AND,答案是兩端點的共同前綴。
Bit Manipulation

Design(設計題 · 系統與韌體)

#622
Medium
Design Circular Queue
設計環形佇列(Ring Buffer),嵌入式與 UART 緩衝的核心結構。
DesignQueueArray
#232
Easy
Implement Queue using Stacks
用兩個堆疊實作佇列,攤銷 O(1) 複雜度分析。
DesignStackQueue
#208
Medium
Implement Trie (Prefix Tree)
實作前綴樹,自動補全、IP 路由與敏感詞過濾的基礎。
DesignTrieString

Graph(圖論 · 拓撲排序)

#207
Medium
Course Schedule
課程表:判斷有向圖是否有環,拓撲排序 Kahn 演算法。
GraphTopological SortBFS
#210
Medium
Course Schedule II
輸出具體的修課順序,拓撲排序的完整版。
GraphTopological SortBFS
#133
Medium
Clone Graph
圖的深拷貝,用 visited 對照表打破環的無限遞迴。
GraphDFSBFSHash Table
#994
Medium
Rotting Oranges
腐爛的橘子,多源 BFS 求最短擴散時間。
BFSMatrixGraph