题解 | #矩阵中的路径#
矩阵中的路径
https://www.nowcoder.com/practice/2a49359695a544b8939c77358d29b7e6?tpId=13&tqId=1517966&ru=%2Fpractice%2F6fe361ede7e54db1b84adc81d09d8524&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D13
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 回溯 dfs
* @param matrix char字符型二维数组
* @param word string字符串
* @return bool布尔型
*/
func hasPath( matrix [][]byte , word string ) bool {
// write code here
words := []byte(word)
for i := range matrix {
for j := range matrix[0] {
if dfs(matrix, words, i, j, 0) {
return true
}
}
}
return false
}
func dfs(matrix [][]byte, word []byte, i, j, index int) bool {
// 边界判断, 如果越界或者字符不匹配 返回false
if i < 0 || i >= len(matrix) || j < 0 || j >= len(matrix[0]) || matrix[i][j] != word[index] {
return false
}
// 如果已经查找到最后一个字符 说明路径成立
if index == len(word) - 1 {
return true
}
// 保存当前坐标的值 用于后续复原
tmp := matrix[i][j]
// 标记当前坐标已经访问过
matrix[i][j] = '.'
// 沿着当前坐标的上下左右4个方向查找
res := dfs(matrix, word, i+1, j, index+1) ||
dfs(matrix, word, i-1, j, index+1) ||
dfs(matrix, word, i, j+1, index+1) ||
dfs(matrix, word, i, j-1, index+1)
// 递归之后回复当前坐标值
matrix[i][j] = tmp
return res
}

阿里云工作强度 731人发布