解题 思路 1:
- 循环,找到主对角线的下标和副对角线的下标,如果矩阵长或宽为奇数的时候,需要减去中间公共的那一个值,中间公共的那个数的下标为mat[mat.size()/2][mat.size()/2]
- 副对角线的下标为 mat [i][mat.size()-i-1]
-
class Solution { public:int diagonalSum(vector<vector<int>>& mat) {int res = 0 ;for(int i = 0 ;i<mat.size();i++){//副对角线 列 = 行的大小 - 当前的行数 -1res +=mat[i][i] + mat [i][mat.size()-i-1];}if(mat.size()%2 ==1){//若行列为奇数,则应该减去公共的那部分res -= mat[mat.size()/2][mat.size()/2];}return res;} };
对于二维数组,矩阵的副对角线上元素的下标
- 对于一个二维数组(矩阵),副对角线上的元素可以通过以下方式计算出它们的下标:
假设矩阵的大小为 n * n,下标从 0 开始计数。
副对角线上的元素满足两个条件:
行下标和列下标之和等于 n-1
行下标不等于列下标
int n = mat.size(); // 矩阵的行数或列数
for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (i + j == n - 1 && i != j) {// 当前元素是副对角线上的一个元素// 下标为 (i, j)}}
}