给你一个正方形矩阵 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
题目来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/matrix-diagonal-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一:
遍历整个二维数组,定义一个sum记录累加结果,累加对角线即累加每行第i个数字和第n-1-i个数字,遍历完数组后一定要判断二位数组行数是否为奇数个,如果是奇数个,累加和要减去最中间的数字,因为那个数字加了2次。
代码:
public static int diagonalSum(int[][] mat) {
int sum=0,n=mat.length;
for(int i=0;i<n;i++) {
sum+=mat[i][i];
sum+=mat[i][n-i-1];
}
if(n%2==1) {//当数组行数为奇数行,减一次最中间的数字
sum-=mat[n/2][n/2];
}
return sum;
}
方法二:
遍历二维数组,遇到i==j或者i+j==n-1时,说明是每行需要拿到的那个对角线数字,累加。
代码:
public static int diagonalSum(int[][] mat) {
int sum=0,n=mat.length;
for(int i=0;i<n;++i) {
for(int j=0;j<n;++j) {
if(i==j||i+j==n-1) {
sum+=mat[i][j];
}
}
}
return sum;
}