05 August 2008
正方形矩阵 mat,请你返回矩阵对角线元素的和
遍历整个矩阵,如果当前坐标 (i, j)(i,j) 满足 i = ji=j 或者 i + j = n - 1i+j=n−1,就把当前的数字加入到答案中。
时间复杂度:O(n^2),其中 n 是矩阵 mat 的边长。
空间复杂度:O(1)。
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public int diagonalSum(int[][] mat) {
int n = mat.length, sum = 0;
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;
}
}
逐行遍历,记当前的行号为 ii,对于一行我们把 (i, i) 位置和 (i, n - i - 1) 加入答案。这样如果 n 是奇数的话,最中间的格子会被加入两次。所以 n 为奇数的时候,我们需要减掉矩阵最中心的那个值。
1
2
3
4
5
6
7
8
9
class Solution {
public int diagonalSum(int[][] mat) {
int n = mat.length, sum = 0, mid = n / 2;
for (int i = 0; i < n; ++i) {
sum += mat[i][i] + mat[i][n - 1 - i];
}
return sum - mat[mid][mid] * (n & 1);
}
}