LeetCode刷题:79. 单词搜索(golang版)
-
题目描述
示例图:
-
思路 1、深度优先递归当前格子的上下左右格子,看是否满足条件 2、递归终止条件,格子的行列坐标超出界限、格子已被使用过、格子字符不等于当前查找字符,返回false,或满足条件返回true 代码
package main import "fmt" func exist(board [][]byte, word string) bool { if len(board) == 0 { return false } //log标志位代表是否被访问过,row、col是行数和列数 var ( log [6][6]bool row = len(board) col = len(board[0]) ) //遍历board,将board中等于word[0]的每个元素都作为一个入口,进行递归判断 for i:=0; i<row; i++ { for j:=0; j<col; j++ { if board[i][j] == word[0] { if DFS(&board,&word,log,i,j,0) { return true } } } } return false } //rowI、colI分别代表board的行坐标列坐标,index 代表已匹配单词的长度 func DFS(board *[][]byte, word *string, log [6][6]bool, rowI int,colI int, index int) bool { //若index等于word的长度,则符合题意,返回true if index >= len(*word){ return true } var ( row = len(*board) col = len((*board)[0]) ) //递归终止条件,行里坐标超出界限或当前格子已被使用过,返回false if colI >= col || colI < 0 || rowI >= row || rowI < 0 || log[rowI][colI] == true { return false } //递归终止条件,不相等返回false if (*board)[rowI][colI] != (*word)[index] { return false } //将当前格子标记为已被使用过 log[rowI][colI] = true //递归当前格子的上下左右格子 return DFS(board,word,log,rowI-1,colI,index+1) || DFS(board,word,log,rowI+1,colI,index+1) || DFS(board,word,log,rowI,colI+1,index+1) || DFS(board,word,log,rowI,colI-1,index+1) } func main() { var tmp = []byte{ A,B,C,E} var t [][]byte t = append(t,tmp) tmp = []byte{ S,F,C,S} t = append(t,tmp) tmp = []byte{ A,D,E,E} t = append(t,tmp) res := exist(t,"ABCC") fmt.Println(res) }
上一篇:
IDEA上Java项目控制台中文乱码