题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个二维数组,求从左上角到右下角,同时其中值异或值为目标值 k 的目标路径数目。

思路分享

代码解答(强烈建议自行解答后再看)

  • 参考题解
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
class Solution:
def countPathsWithXorValue(self, grid: List[List[int]], k: int) -> int:
# 递推
MOD = 1_000_000_007
m, n = len(grid), len(grid[0])
u = 1 << max(map(max, grid)).bit_length()
if k >= u:
return 0
f = [[[0] * u 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 x in range(u):
# print(i, j, x)
f[i+1][j+1][x] = (f[i][j+1][x ^ grid[i][j]] + f[i+1][j][x ^ grid[i][j]]) % MOD
return f[m][n][k]
# 记忆化搜索
# m, n = len(grid), len(grid[0])
# @cache
# def dfs(i:int, j:int, val:int) -> int:
# if i < 0 or j < 0:
# return 0
# if i == 0 and j == 0:
# return 1 if val == grid[0][0] else 0
# val ^= grid[i][j]
# return (dfs(i-1, j, val) + dfs(i, j-1, val)) % 1_000_000_007
# return dfs(m-1, n-1, k) % 1_000_000_007