The Backtracking Tips:
- Permutations. Problem 46. Problem 47. Problem 60. 526. 996.
- Combination problem Combination. Problem 39, 40, 77, 216.
- Permutation and combinatorial hybridization problems. The 1079th.
- N Queen ultimate solution (binary solution). Problem 51. Problem 52.
- Sudoku problem. 37 items.
- Search in four directions. Problem 79. Problem 212. Problem 980.
- Subset problem. Problem 78. Problem 90.
- Trie. Problem 208. Problem 211.
- BFS optimization. Problem 126. Problem 127.
- DFS template. (Just an example, not corresponding to any question)
func combinationSum2(candidates []int, target int)[] []int {
if len(candidates) == 0 {
return[] []int{}
}
c, res := []int{}, [] []int{}
sort.Ints(candidates)
findcombinationSum2(candidates, target, 0, c, &res)
return res
}
func findcombinationSum2(nums []int, target, index int, c []int, res *[][]int) {
if target == 0 {
b := make([]int.len(c))
copy(b, c)
*res = append(*res, b)
return
}
for i := index; i < len(nums); i++ {
if i > index && nums[i] == nums[i- 1] { // Here is the key logic for deweighting
continue
}
if target >= nums[i] {
c = append(c, nums[i])
findcombinationSum2(nums, target-nums[i], i+1, c, res)
c = c[:len(c)- 1]}}}Copy the code
- BFS template. (Just an example, not corresponding to any question)
func updateMatrix_BFS(matrix [][]int)[] []int {
res := make([] []int.len(matrix))
if len(matrix) == 0 || len(matrix[0= =])0 {
return res
}
queue := make([] []int.0)
for i, _ := range matrix {
res[i] = make([]int.len(matrix[0]))
for j, _ := range res[i] {
if matrix[i][j] == 0 {
res[i][j] = - 1
queue = append(queue, []int{i, j})
}
}
}
level := 1
for len(queue) > 0 {
size := len(queue)
for size > 0 {
size -= 1
node := queue[0]
queue = queue[1:]
i, j := node[0], node[1]
for _, direction := range[] []int{{- 1.0}, {1.0}, {0.1}, {0.- 1}} {
x := i + direction[0]
y := j + direction[1]
if x < 0 || x >= len(matrix) || y < 0 || y >= len(matrix[0]) || res[x][y] < 0 || res[x][y] > 0 {
continue
}
res[x][y] = level
queue = append(queue, []int{x, y})
}
}
level++
}
for i, row := range res {
for j, cell := range row {
if cell == - 1 {
res[i][j] = 0}}}return res
}
Copy the code
Title | Solution | Difficulty | Time | Space | collection |
---|---|---|---|---|---|
17. Letter Combinations of a Phone Number | Go | Medium | O(log n) | O(1) | |
22. Generate Parentheses | Go | Medium | O(log n) | O(1) | |
37. Sudoku Solver | Go | Hard | O(n^2) | O(n^2) | ❤ ️ |
39. Combination Sum | Go | Medium | O(n log n) | O(n) | |
40. Combination Sum II | Go | Medium | O(n log n) | O(n) | |
46. Permutations | Go | Medium | O(n) | O(n) | ❤ ️ |
47. Permutations II | Go | Medium | O(n^2) | O(n) | ❤ ️ |
51. N-Queens | Go | Hard | O(n^2) | O(n) | ❤ ️ |
52. N-Queens II | Go | Hard | O(n^2) | O(n) | ❤ ️ |
60. Permutation Sequence | Go | Medium | O(n log n) | O(1) | |
77. Combinations | Go | Medium | O(n) | O(n) | ❤ ️ |
78. Subsets | Go | Medium | O(n^2) | O(n) | ❤ ️ |
79. Word Search | Go | Medium | O(n^2) | O(n^2) | ❤ ️ |
89. Gray Codes | Go | Medium | O(n) | O(1) | |
90. Subsets II | Go | Medium | O(n^2) | O(n) | ❤ ️ |
93. Restore IP Addresses | Go | Medium | O(n) | O(n) | ❤ ️ |
126. Word Ladder II | Go | Hard | O(n) | O(n^2) | ❤ ️ |
131. Palindrome Partitioning | Go | Medium | O(n) | O(n^2) | ❤ ️ |
211. Add and Search Word – Data structure design | Go | Medium | O(n) | O(n) | ❤ ️ |
212. Word Search II | Go | Hard | O(n^2) | O(n^2) | ❤ ️ |
216. Combination Sum III | Go | Medium | O(n) | O(1) | ❤ ️ |
306. Additive Number | Go | Medium | O(n^2) | O(1) | ❤ ️ |
357. Count Numbers with Unique Digits | Go | Medium | O(1) | O(1) | |
401. Binary Watch | Go | Easy | O(1) | O(1) | |
526. Beautiful Arrangement | Go | Medium | O(n^2) | O(1) | ❤ ️ |
784. Letter Case Permutation | Go | Easy | O(n) | O(n) | |
842. Split Array into Fibonacci Sequence | Go | Medium | O(n^2) | O(1) | ❤ ️ |
980. Unique Paths III | Go | Hard | O(n log n) | O(n) | |
996. Number of Squareful Arrays | Go | Hard | O(n log n) | O(n) | |
1079. Letter Tile Possibilities | Go | Medium | O(n^2) | O(1) | ❤ ️ |