1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| class Solution: def numberOfPaths(self, grid: List[List[int]], k: int) -> int: m, n = len(grid), len(grid[0]) MOD = 1_000_000_007
f = [[0]*k for _ in range(n+1)] f[1][0] = 1 new_f = [0]*k for i in range(m): for j in range(n): for val in range(k): next_val = (val+grid[i][j])%k new_f[val] = (f[j+1][next_val] + f[j][next_val]) % MOD f[j+1][:] = new_f return f[n][0]
m, n = len(grid), len(grid[0]) MOD = 1_000_000_007
f = [[[0]*k for _ in range(n+1)] for _ in range(m+1)] f[1][0][0] = 1 for i in range(m): for j in range(n): for val in range(k): next_val = (val+grid[i][j])%k f[i+1][j+1][val] = (f[i][j+1][next_val] + f[i+1][j][next_val]) % MOD return f[m][n][0] m, n = len(grid), len(grid[0]) MOD = 1_000_000_007 @cache def dfs(i:int, j:int, val:int)->int: if i < 0 or j < 0: return 0 val += grid[i][j] val %= k if i == 0 and j == 0 and val == 0: return 1 return (dfs(i-1, j, val) + dfs(i, j-1, val))% MOD ans = dfs(m-1, n-1, 0) dfs.cache_clear() return ans
|