📅  最后修改于: 2023-12-03 15:11:23.418000             🧑  作者: Mango
给定一个正方形矩阵 mat
,请返回矩阵对角线元素的和。
只需要实现一个函数 diagonalSum(mat: List[List[int]]) -> int
即可。
示例 1:
输入: mat = [[1,2,3],
[4,5,6],
[7,8,9]]
输出: 25
解释: 对角线的和为: 1 + 5 + 9 + 3 + 7 = 25
注意,元素 mat[1][1] = 5 只会被计算一次。
示例 2:
输入: mat = [[1,1,1,1],
[1,1,1,1],
[1,1,1,1],
[1,1,1,1]]
输出: 8
示例 3:
输入: mat = [[5]]
输出: 5
题目要求返回矩阵对角线元素的和,可以分两种情况讨论。
对角线上元素的下标为 i
时,有两种情况:i == j
或者 i == n - j - 1
,此处的 n
是矩阵的行数和列数。
如果矩阵的行数和列数是奇数,那么它的中心点也属于对角线元素的一部分。
class Solution:
def diagonalSum(self, mat: List[List[int]]) -> int:
rows, cols = len(mat), len(mat[0])
res = 0
for i in range(rows):
for j in range(cols):
if i == j or i + j == rows - 1:
res += mat[i][j]
if rows % 2 == 1:
res -= mat[rows // 2][cols // 2]
return res
这里使用双层循环遍历矩阵,根据上面讨论的两种情况,得到对角线上的元素,并累加其和。如果矩阵的行数和列数都是奇数,那么中心点的位置被重复计算了一次,需要减去它的值。