其他分享
首页 > 其他分享> > 动态规划-记忆化搜索-6110. 网格图中递增路径的数目

动态规划-记忆化搜索-6110. 网格图中递增路径的数目

作者:互联网

问题描述

给你一个 m x n 的整数网格图 grid ,你可以从一个格子移动到 4 个方向相邻的任意一个格子。

请你返回在网格图中从 任意 格子出发,达到 任意 格子,且路径中的数字是 严格递增 的路径数目。由于答案可能会很大,请将结果对 109 + 7 取余 后返回。

如果两条路径中访问过的格子不是完全相同的,那么它们视为两条不同的路径。

示例 1:

输入:grid = [[1,1],[3,4]]
输出:8
解释:严格递增路径包括:

输入:grid = [[1],[2]]
输出:3
解释:严格递增路径包括:

提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 1000
1 <= m * n <= 105
1 <= grid[i][j] <= 105

问题求解

dp[i][j]为以i,j为起点的递增数目,记忆化搜索即可。

class Solution:
    def countPaths(self, grid: List[List[int]]) -> int:
        mod = 10 ** 9 + 7
        m, n = len(grid), len(grid[0])
        res = 0
        
        @cache
        def dfs(i, j):
            res = 1
            for ni, nj in (i - 1, j), (i + 1, j), (i, j - 1), (i, j + 1):
                if 0 <= ni < m and 0 <= nj < n and grid[ni][nj] > grid[i][j]:
                    res = (res + dfs(ni, nj)) % mod
            return res
        
        for i in range(m):
            for j in range(n):
                res = (res + dfs(i, j)) % mod
        
        return res

标签:格子,res,递增,路径,6110,网格,grid,长度
来源: https://www.cnblogs.com/hyserendipity/p/16441319.html