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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP