构造乘积矩阵
构造乘积矩阵1
题目讲解
不能直接把所有数乘起来再除以 grid[i][j]
因为 grid[i][j] 可能为 0,除法不可行。
采用 前缀积 + 后缀积 的操作思路:
前缀积: Prefix[i] = arr[0] * arr[1] * arr[2] * arri-1.
后缀积: suffix[i] = arr[i+1] * arr[i+2] * arrL-1
具体流程
代码
c++
python
java
class Solution:
def constructProductMatrix(self, grid: List[List[int]]) -> List[List[int]]:
MOD = 12345
m, n = len(grid), len(grid[0])
# 二维数组展开为一维
arr = [grid[i][j] for i in range(m) for j in range(n)]
L = len(arr)
# 前缀积初始化
prefix = [1] * L
# 后缀积初始化
suffix = [1] * L
# 前缀积
for i in range(1, L):
prefix[i] = (prefix[i - 1] * arr[i - 1]) % MOD
# 后缀积
# range(start, stop, step).
# suffix[L-1] 是最后一个元素,它没有右边的数 → 我们已经提前把 suffix[L-1] 设为 1(空积)
# 所以我们要从 倒数第二个元素 L-2 开始往前算.
for i in range(L - 2, -1, -1):
suffix[i] = (suffix[i + 1] * arr[i + 1]) % MOD
# 计算答案
ans_arr = [(prefix[i] * suffix[i]) % MOD for i in range(L)]
# 映射回二维
ans = [[0] * n for _ in range(m)]
idx = 0
for i in range(m):
for j in range(n):
ans[i][j] = ans_arr[idx]
idx += 1
return ans