题解 | #矩阵中的路径#

矩阵中的路径

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
}

全部评论

相关推荐

02-17 20:43
西北大学 Java
醉蟀:别浪费时间。老板是一个想入行互联网的新人。去年6 7月boss上面看到的。他把所有人都拉到一个微信群,然后一个一个面,自己也在学技术。公司就是一个小区里面租的两间房。都没有买电脑啥的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务