题解 | #矩阵中的路径#

矩阵中的路径

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

回溯

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param matrix char字符型二维数组 
# @param word string字符串 
# @return bool布尔型
#
class Solution:
    def hasPath(self , matrix: List[List[str]], word: str) -> bool:
    	#如果矩阵为空或字符串为空,不满足条件
        if matrix == [[]] or word == '':
            return False
        rows = len(matrix)
        cols = len(matrix[0])
        # 设置和matrix大小相同的visited矩阵,保存每个元素是否被访问过
        visited = [[0] * cols for _ in range(rows)]
        pathlength = 0
        
        def backtracking(matrix,word,col,row,pathlength):
            haspath = False
            #如果遍历路径长度等于字符串长度,那么已经找到了这条路径
            if pathlength >= len(word):
                return True
            #行列都要在矩阵范围里,并且该元素与字符串当前访问值相同且没被访问过
            if 0<=row<rows and 0<=col<cols and matrix[row][col] == word[pathlength] and visited[row][col] == 0:
            	#遍历长度加一,标记已经被访问
                pathlength += 1
                visited[row][col] = 1
                #上下左右四个方向,开始下一步的搜索
                haspath = backtracking(matrix, word, col-1, row, pathlength) or backtracking(matrix, word, col, row-1, pathlength) or backtracking(matrix, word, col+1, row, pathlength) or backtracking(matrix, word, col, row+1, pathlength)
                #如果上下左右都没有搜索到,需要回溯到上一步
                if haspath == False:
                    pathlength -= 1
                    visited[row][col] = 0
            return haspath
        #矩阵中的每个位置都当作起始节点,开始查找搜索路径
        for i in range(rows):
            for j in range(cols):
                if backtracking(matrix, word, j, i, pathlength):
                    return True
        return False
全部评论

相关推荐

牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
11-27 12:36
已编辑
门头沟学院 前端工程师
Apries:这个阶段来说,很厉害很厉害了,不过写的简历确实不是很行,优势删掉吧,其他的还行
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务