矩阵对角线元素的和
题目描述
给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。
请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。
示例 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
提示:
- n == mat.length == mat[i].length
- 1 <= n <= 100
- 1 <= mat[i][j] <= 100
解题思路
假设矩阵的长度为 n,那么它的对角线的下标为(0,0),(1,1),...,(n-1,n-1),而它的副对角线的下标为(n-1,0),(n-2,1),...,(0,n-1),因此直接将这些值累加起来,然后去掉中间的点即可。
复杂度分析
- 时间复杂度:O(n),其中 n 是数组 mat 的长度。
- 空间复杂度:O(1)。
代码实现
class Solution {
public int diagonalSum(int[][] mat) {
int res = 0;
int len = mat.length;
for (int i = 0, j = len - 1; i < len; i ++, j --) {
res += mat[i][i];
if (i != j) {
res += mat[j][i];
}
}
return res;
}
}