题目描述
题意解析
求数组两个对角线的数值加和,每个数只计算一边。
思路分析
如果都是从第一行开始加和的话,主对角线是行号和列号每次加1,副对角线是行号每次加1,列号每次减1。要注意对于数组大小n的奇偶性判定,奇数时会将中间元素加两边,所以最终要减去。
代码
class Solution {
public int diagonalSum(int[][] mat) {
int n = mat.length;
int ans = 0;
for(int i=0,j=0;i<n;i++,j++)
ans += mat[i][j];
for(int i=0,j=n-1;i<n;i++,j--)
ans += mat[i][j];
if(n%2>0)
ans -= mat[n/2][n/2];
return ans;
}
}