Python程序:计算从起点到终点成本为k的路径数
假设我们有一个二维二进制矩阵和另一个值k。现在从左上角单元格开始,我们必须到达右下角单元格。一步只能向下或向右移动。一条路径的分数是路径上单元格值的总和。我们必须找到从起始单元格到结束单元格且分数为k的路径数。如果可能的路径数量巨大,则返回结果模10^9+7。
因此,如果输入如下所示:
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 0 |
K = 2,则输出将为4,因为分数为2的路径为[R,R,D,D],[D,R,R,D],[D,D,R,R],[D,R,D,R],其中D代表向下,R代表向右。
为了解决这个问题,我们将遵循以下步骤:
deno := 10^9 + 7
m := 矩阵的行数,n := 矩阵的列数
定义一个函数dfs()。这将接收i、j、pts作为参数
如果 i >= m 或 j >= n,则
返回0
pts := pts + matrix[i, j]
如果i等于m - 1且j等于n - 1,则
如果pts等于k,则返回1,否则返回0
返回dfs(i + 1, j, pts) + dfs(i, j + 1, pts)
在主方法中执行以下操作:
返回dfs(0, 0, 0) mod deno
示例
让我们看下面的实现以更好地理解:
class Solution: def solve(self, matrix, k): m, n = len(matrix), len(matrix[0]) def dfs(i=0, j=0, pts=0): if i >= m or j >= n: return 0 pts += matrix[i][j] if i == m - 1 and j == n - 1: return int(pts == k) return dfs(i + 1, j, pts) + dfs(i, j + 1, pts) return dfs() % (10 ** 9 + 7) ob = Solution() matrix = [ [0, 0, 1], [1, 0, 1], [0, 1, 0] ] k = 2 print(ob.solve(matrix, k))
输入
[ [0, 0, 1], [1, 0, 1], [0, 1, 0] ], 2
输出
4
广告