题目
分析
在矩阵中从0,0未知开始遍历,每次找到path的开头,开始dfs寻找path下一个字符是否在上下左右的位置。需要考虑的是边界条件:
- 1,path寻找到尾部,存在路径返回true
- 2,坐标超出矩阵范围,返回false
- 3,坐标已经被加入路径,返回false
- 4,坐标值等于path当前字符,将坐标加入路径
- 4.1 如果dfs找到剩余路径,返回true
- 4.2 如果没有找到剩余路径,将坐标退出路径, 返回false
python代码
class Solution:
def __init__(self):
self.matrix = None
def hasPath(self, matrix, rows, cols, path):
# write code here
self.matrix = matrix
self.flag =[ [ [0]for i in range(cols)] for j in range(rows)]
for i in range(rows):
for j in range(cols):
if self.matrix[i][j]==path[0]:
if self.dfs(i,j,path):
return True
return False
def dfs(self,x,y,path):
if path == "": return True
if x<0 or y<0 or x>len(self.matrix)-1 or y>len(self.matrix[0])-1:
return False
if self.flag[x][y]==1:
return False
if self.matrix[x][y]!=path[0]:
return False
else:
self.flag[x][y] = 1
if self.dfs(x+1,y,path[1:]) or self.dfs(x-1,y,path[1:]) or self.dfs(x,y+1,path[1:]) or self.dfs(x,y-1,path[1:]):
return True
else:
self.flag[x][y] = 0
return False