1572. 矩阵对角线元素的和
大约 2 分钟
---
1572. 矩阵对角线元素的和
- 标签:数组、矩阵
- 难度:简单
题目链接
题目大意
描述:给定一个 的方阵 。
要求:返回矩阵两条对角线上元素的和。注意,当 为奇数时,中间元素只计算一次。
说明:
- 。
示例:
- 示例 1:
示例 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- 示例 2:
输入:
输出:解题思路
思路 1:一次遍历
1. 核心思想
主对角线的索引条件:。
副对角线的索引条件:。
一次遍历所有元素,如果满足上述任一条件,累加。当 为奇数时中间元素 会被两条对角线都计入,需要减去一次。
2. 具体步骤
第 1 步:初始化 。
第 2 步:遍历 ,:
- 如果 或 ,。
第 3 步:如果 为奇数,减去 (因为被加了两次)。
第 4 步:返回 。
3. 优化:只遍历对角线
不需要遍历全部元素,只需遍历主对角线和副对角线:
total = 0
for i in range(n):
total += mat[i][i] # 主对角线
total += mat[i][n-1-i] # 副对角线
if n % 2 == 1:
total -= mat[n//2][n//2] # 去重4. 举例说明
以 为例:
1 2 3
4 5 6
7 8 9主对角线:
副对角线:
为奇数,中间元素 重复,减去 。
总和 。
思路 1:代码
class Solution:
def diagonalSum(self, mat: List[List[int]]) -> int:
n = len(mat)
total = 0
for i in range(n):
total += mat[i][i] # 主对角线
total += mat[i][n-1-i] # 副对角线
if n % 2 == 1:
total -= mat[n//2][n//2]
return total思路 1:复杂度分析
- 时间复杂度:。
- 空间复杂度:。