Skip to content

Commit 797f653

Browse files
committed
Runtime: 2506 ms (Top 21.4%) | Memory: 118.67 MB (Top 7.1%)
1 parent ccfe76e commit 797f653

File tree

1 file changed

+27
-28
lines changed

1 file changed

+27
-28
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,29 @@
1-
from functools import lru_cache
2-
class Solution:
3-
def countPaths(self, grid: List[List[int]]) -> int:
4-
5-
6-
row = len(grid)
7-
col = len(grid[0])
8-
9-
@lru_cache(None)
10-
def helper(i, j):
11-
12-
drs = [(-1,0),(1,0),(0,-1),(0,1)]
13-
t = 0
14-
for x,y in drs:
15-
if 0 <= i+x < row and 0 <= j+y < col and grid[i+x][j+y] > grid[i][j]:
16-
t += 1+helper(i+x, j+y)
17-
return t
18-
1+
# Runtime: 2506 ms (Top 21.4%) | Memory: 118.67 MB (Top 7.1%)
192

20-
21-
m = (10**9) + 7
22-
ans = row*col%m
23-
24-
for i in range(row):
25-
for j in range(col):
26-
ans += helper(i, j)%m
27-
ans %= m
28-
29-
3+
class Solution:
4+
def __init__(self):
5+
self.dp = None
6+
self.di = [0, 0, -1, 1]
7+
self.dj = [-1, 1, 0, 0]
8+
self.mod = 1000000007
9+
10+
def countPaths(self, grid):
11+
n = len(grid)
12+
m = len(grid[0])
13+
self.dp = [[0] * m for _ in range(n)]
14+
ans = 0
15+
for i in range(n):
16+
for j in range(m):
17+
ans = (ans + self.dfs(grid, i, j, -1)) % self.mod
3018
return ans
19+
20+
def dfs(self, grid, i, j, prev):
21+
if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]) or grid[i][j] <= prev:
22+
return 0
23+
if self.dp[i][j] != 0:
24+
return self.dp[i][j]
25+
self.dp[i][j] = 1
26+
for k in range(4):
27+
self.dp[i][j] += self.dfs(grid, i + self.di[k], j + self.dj[k], grid[i][j])
28+
self.dp[i][j] %= self.mod
29+
return self.dp[i][j] % self.mod

0 commit comments

Comments
 (0)