JZ65 矩阵中的路径

描述
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如
矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。

示例1
输入:
[[a,b,c,e],[s,f,c,s],[a,d,e,e]],“abcced”
复制
返回值:
true

回溯算法:
遍历矩阵中的每一个点,然后对每个点从他的上下左右四个方向走

class Solution:
    def solution(self,matrix,word,i,j,index):
        #当前点是未遍历的。如果word的每个字符都查找完了,直接返回true
        if index == len(word):
            return True   
              
        row = len(matrix)
        col = len(matrix[0])
        
        #边界的判断,如果越界直接返回false
        if i<0 or i>=row or j<0 or j>=col:
            return False
        #当前值和word值匹配上了
        if matrix[i][j] == word[index]:
            #把当前坐标的值保存下来,为了在最后复原
            tmp = matrix[i][j]
            #修改当前值坐标,表示已经遍历过的点不能再次遍历
            matrix[i][j] = 0
            #匹配当前值的上下左右和word的下一个字符是否相等
            if self.solution(matrix,word,i+1,j,index+1) or \
            self.solution(matrix,word,i-1,j,index+1) or \
            self.solution(matrix,word,i,j+1,index+1) or \
            self.solution(matrix,word,i,j-1,index+1):
                return True
            #对矩阵进行复原
            matrix[i][j] = tmp
        #当前值和word值没有匹配上
        return False

    def hasPath(self , matrix , word ):
        if not matrix[0] or not word:
            return False
        row = len(matrix)
        col = len(matrix[0])
        for i in range(row):
            for j in range(col):
                #遍历矩阵中的每个点
                if self.solution(matrix,word,i,j,0):
                        return True
        return False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值