Backtracking 的 Tips:
- 排列問題 Permutations凳枝。第 46 題滞谢,第 47 題碟刺。第 60 題锁保,第 526 題,第 996 題半沽。
- 組合問題 Combination爽柒。第 39 題,第 40 題者填,第 77 題浩村,第 216 題。
- 排列和組合雜交問題占哟。第 1079 題心墅。
- N 皇后終極解法(二進(jìn)制解法)酿矢。第 51 題,第 52 題怎燥。
- 數(shù)獨(dú)問題瘫筐。第 37 題。
- 四個(gè)方向搜索铐姚。第 79 題策肝,第 212 題,第 980 題谦屑。
- 子集合問題驳糯。第 78 題,第 90 題氢橙。
- Trie。第 208 題恬偷,第 211 題悍手。
- BFS 優(yōu)化。第 126 題袍患,第 127 題坦康。
- DFS 模板。(只是一個(gè)例子诡延,不對(duì)應(yīng)任何題)
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] { // 這里是去重的關(guān)鍵邏輯
continue
}
if target >= nums[i] {
c = append(c, nums[i])
findcombinationSum2(nums, target-nums[i], i+1, c, res)
c = c[:len(c)-1]
}
}
}
- BFS 模板滞欠。(只是一個(gè)例子,不對(duì)應(yīng)任何題)
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
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者