033_单词搜索
知识点:回溯算法
LeetCode第七十九题:https://leetcode-cn.com/problems/word-search/solution/
语言:GoLang
var directs = [][]int{{1, 0}, {0, 1}, {-1, 0}, {0, -1}}
func exist(board [][]byte, word string) bool {
for i := 0; i < len(board); i++ {
for j := 0; j < len(board[0]); j++ {
if dfs(board, i, j, word) {
return true
}
}
}
return false
}
// 回溯,回溯是特殊的dfs
func dfs(board [][]byte, x int, y int, word string) bool {
if board[x][y] != word[0] {
return false
}
if len(word) == 1 {
return true
}
tmp := board[x][y]
board[x][y] = '#'
for _, direct := range directs {
newX, newY := x + direct[0], y + direct[1]
if newX < 0 || len(board) <= newX || newY < 0 || len(board[0]) <= newY {
continue
}
if dfs(board, newX, newY, word[1:]) {
return true
}
}
board[x][y] = tmp
return false
}

浙公网安备 33010602011771号