📅  最后修改于: 2023-12-03 15:40:22.085000             🧑  作者: Mango
给定一个 $m\times n$ 的矩阵,构造一个 $m\times n$ 的矩阵,使得新矩阵中每个元素都是原矩阵中相邻元素之和。
我们可以使用一个 $m\times n$ 的新矩阵来存储相邻元素之和。对于原矩阵中每个元素 $a_{i,j}$,我们只需要计算它上下左右四个方向的元素之和,即:
$$ b_{i,j} = a_{i-1,j}+a_{i+1,j}+a_{i,j-1}+a_{i,j+1} $$
需要注意的是,对于边界元素,我们只需考虑有值的元素。
def adjacent_sum(matrix):
'''
构造一个矩阵,使每个像元由给定矩阵中各个像元的相邻元素之和组成
Args:
matrix: List[List[int]],一个 m×n 的矩阵
Returns:
List[List[int]],一个 m×n 的矩阵,每个元素都是原矩阵中相邻元素之和
Example:
>>> adjacent_sum([[1,2,3],[4,5,6],[7,8,9]])
[[7, 12, 13], [16, 22, 17], [11, 22, 13]]
'''
m, n = len(matrix), len(matrix[0]) # 矩阵的行列数
res = [[0]*n for _ in range(m)] # 新矩阵
for i in range(m):
for j in range(n):
# 上下左右四个方向
left, right, up, down = j-1, j+1, i-1, i+1
if left >= 0: # 左
res[i][j] += matrix[i][left]
if right < n: # 右
res[i][j] += matrix[i][right]
if up >= 0: # 上
res[i][j] += matrix[up][j]
if down < m: # 下
res[i][j] += matrix[down][j]
return res
def test_adjacent_sum():
assert adjacent_sum([[1,2,3],[4,5,6],[7,8,9]]) == [[7, 12, 13], [16, 22, 17], [11, 22, 13]]
assert adjacent_sum([[2,2],[2,2]]) == [[4, 6], [6, 4]]
assert adjacent_sum([[1]]) == [[0]]
assert adjacent_sum([[1,1],[1,1]]) == [[2, 3], [3, 2]]
print('所有测试用例通过')
test_adjacent_sum()
本问题介绍了如何构造一个矩阵,使得每个像元由给定矩阵中各个像元的相邻元素之和组成。我们介绍了解决方案和代码实现,并给出了测试用例。