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) ❤ ️