给你一个正方形矩阵 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
思路
主对角线时;i=j;逆对角线 满足 i+j=矩阵维度-1; 奇数维度的矩阵存在重复使用的中间一个数要进行舍去。
class Solution {
public:
int diagonalSum(vector<vector<int>>& mat) {
if(mat.size()==1){
return mat[0][0];
}
int sum=0;
//主对角线
for (int i = 0; i < mat.size(); ++i) {
//主对角线
sum+=mat[i][i];
//逆对角线
sum+=mat[i][mat.size()-1-i];
}
//n阶矩阵 n为奇数需要减去中间重复的一个
if(mat.size()%2!=0){
sum-=mat[mat.size()/2][mat.size()/2];
}
return sum;
}
};