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
}
posted @ 2020-03-22 22:12  Cenyol  阅读(78)  评论(0)    收藏  举报