解题 思路 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++){ //副对角线 列 = 行的大小 - 当前的行数 -1 res +=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)
}
}
}