Depth First Search
题目
- Leetcode 351. Android Unlock Patterns
- Leetcode 17. Letter Combinations of a Phone Number
- Leetcode 51. N-Queens (这道题和letter combination非常像,我们每一row都要选,但有不同选择,所以我们顺序遍历row,只对col进行搜索)
- Leetcode 52. N-Queens II
- Leetcode 37. Sudoku Solver
- Leetcode 339. Nested List Weight Sum
- Leetcode 364. Nested List Weight Sum II (第二问的区别在于depth是从下往上算的,我们可以做的是先DFS算出它的maxDepth,然后依然top-down来做,通过maxDepth - curDepth来反算depth)
- Leetcode 386. Lexicographical Numbers
- Leetcode 79. Word Search
- Leetcode 254. Factor Combinations
Permutation问题
- Leetcode Leetcode 267. Palindrome Permutation II
- Leetcode 247. Strobogrammatic Number II
- Leetcode 248. Strobogrammatic Number III
- Leetcode 22. Generate Parentheses
- Leetcode 46. Permutations
- Leetcode 47. Permutations II
Subset问题,本质上是01取或者不取
- Leetcode 320. Generalized Abbreviation
- Leetcode 411. Minimum Unique Word Abbreviation
- Leetcode 408. Valid Word Abbreviation (这道题并不是subset问题,只是411的一部分)
- Leetcode 401. Binary Watch
- Leetcode 131. Palindrome Partitioning
- Leetcode 77. Combinations (subset without duplicate)
- Leetcode 39. Combination Sum (subset without duplicate)
- Leetcode 40. Combination Sum II (subset with duplicate,特别注意要使用visited array)
- Leetcode 216. Combination Sum III (subset without duplicate)
Surrounded Regions类型搜索问题(这种类型的问题需要换个思路思考搜索的起点,通常可以降低时间复杂度)
- Leetcode 417. Pacific Atlantic Water Flow (比如这道题,我们搜索的起点可以是每座山,也可以是每片海,而妙就妙在,如果以每座山作为起点,那么我们需要搜索O(mn)次,而以每片海作为搜索起点,那么我们只需要搜索O(m + n)次)
- Leetcode 130. Surrounded Regions (比如这道题,我们搜索的起点可以是中间的O,也可以是四边的O,如果以中间的O作为搜索的起点,那么需要搜索O(mn)次,如果以边上的O作为起点,那么只需要搜索O(m + n)次)
- Leetcode 286. Walls and Gates