GuilinDev

Lc1572

05 August 2008

1572 Matrix Diagonal Sum

正方形矩阵 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);
    }
}