---
# System prepended metadata

title: 2328. Number of Increasing Paths in a Grid
tags: [leetcode]

---

# 2328. Number of Increasing Paths in a Grid
#### Difficulty: Hard
link: https://leetcode.com/problems/number-of-increasing-paths-in-a-grid/

### 1. DFS + DP  
#### $O(mn)$ runtime, $O(mn)$ space

DP table紀錄從第i,j個cell出發總共能走幾條路。計算DP[i][j]時，把自己一個cell的path，和自己到周圍鄰居的path，全部加起來。

##### python
```python=
class Solution:
    def countPaths(self, grid: List[List[int]]) -> int:
        m, n, mod = len(grid), len(grid[0]), 10 ** 9 + 7
        dp = [[None] * n for _ in range(m)]
        
        def dfs(i, j):
            if dp[i][j] is None:
                dp[i][j] = 1
                for x, y in [[i-1, j], [i+1, j], [i, j-1], [i, j+1]]:
                    if 0 <= x < m and 0 <= y < n and grid[i][j] < grid[x][y]:
                        dp[i][j] = (dp[i][j] + dfs(x, y)) % mod
            return dp[i][j]
        
        total = 0
        for i in range(m):
            for j in range(n):
                total = (total + dfs(i, j)) % mod
        
        return total
```

###### tags: `leetcode`