题解 | #矩阵中的路径#

矩阵中的路径

https://www.nowcoder.com/practice/2a49359695a544b8939c77358d29b7e6

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param matrix char字符型二维数组
 * @param word string字符串
 * @return bool布尔型
 */
func hasPath(matrix [][]byte, word string) bool {
	// write code here
	n := len(matrix)
	m := len(matrix[0])
	if n == 0 || m == 0 {
		return false
	}

	// flag 是否走过
	flag := make([][]bool, n)
	for i := range flag {
		flag[i] = make([]bool, m)
	}

	for i := 0; i < n; i++ {
		for j := 0; j < m; j++ {
			// 每个位置都当作起点试一试
			if dfs(matrix, n, m, i, j, word, 0, flag) {
				return true
			}
		}
	}

	return false
}

// k 当前第几个字符
// 因为每一个点我们都可以往他的 4 个方向查找,所以我们可以把它想象为一棵 4 叉树,就是每个节点有 4 个子节点
func dfs(matrix [][]byte, n, m, i, j int, word string, k int, flag [][]bool) bool {
	if i < 0 || i >= n || j < 0 || j >= m {
		return false
	}

	if matrix[i][j] != word[k] {
		return false
	}

	if flag[i][j] {
		return false
	}

	if k == len(word)-1 {
		return true
	}

	flag[i][j] = true

	// up++
	if dfs(matrix, n, m, i-1, j, word, k+1, flag) {
		return true
	}
	// down++
	if dfs(matrix, n, m, i+1, j, word, k+1, flag) {
		return true
	}
	// l++
	if dfs(matrix, n, m, i, j-1, word, k+1, flag) {
		return true
	}
	// r++
	if dfs(matrix, n, m, i, j+1, word, k+1, flag) {
		return true
	}

	// 没找到经过此格的,修改回原来的样子
	flag[i][j] = false

	return false
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 14:23
steelhead:你回的有问题,让人感觉你就是来学习的
点赞 评论 收藏
分享
06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 11:30
仁者伍敌:kpi都懒得刷了属于是
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务