1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| class Solution:
def hasValidPath(self, grid: List[List[str]]) -> bool:
self.n = len(grid)
self.m = len(grid[0])
self.dp = [[[-1 for _ in range(205)] for _ in range(self.m)] for _ in range(self.n)]
def solve(i, j, k):
if i >= self.n or j >= self.m:
return False
if grid[i][j] == '(':
k += 1
else:
k -= 1
if k < 0:
return False
if i == self.n - 1 and j == self.m - 1:
return k == 0
if self.dp[i][j][k] != -1:
return self.dp[i][j][k]
self.dp[i][j][k] = solve(i + 1, j, k) or solve(i, j + 1, k)
return self.dp[i][j][k]
return solve(0, 0, 0)
|