南充建设企业网站,讨论致同国际网站建设情况,公司网站不续费,做评选活动的网站目录
题目#xff1a;
示例#xff1a;
分析#xff1a;
代码#xff1a; 题目#xff1a; 示例#xff1a; 分析#xff1a;
题目给我们一个矩阵#xff0c;让我们把矩阵对角线上的元素都加起来返回。
那么矩阵的对角线是有两条的#xff0c;一条是从左上到右下…目录
题目
示例
分析
代码 题目 示例 分析
题目给我们一个矩阵让我们把矩阵对角线上的元素都加起来返回。
那么矩阵的对角线是有两条的一条是从左上到右下另一条是从右上到左下。
我们先看第一条 可以看出来对角线上的元素下标是有规律的他们的行下标和列下标是一样的所以我们遍历n次也就是矩阵的长度次。每次都加上mat[ i ][ i ]这样就算是把从左上到右下这条对角线给解决了。
第二条从右上到左下 我们咋一看好像规律没有上一条这么明显不过总还是有的他们同一个元素的行下标与列下标相加总和是等于n-1的所以我们仍然可以遍历n次每次都加上mat[ i ][ n - i - 1 ]这样就把从右上到左下的这条对角线也给解决了。
最后还有一个小问题如果矩阵的长度为奇数那么我们获取两条对角线上的元素时就会重复包含矩阵最中间的元素两次。
所以我们最后需要做一个判断如果n为奇数那么答案还需要再减去矩阵中心的数。
代码
class Solution {
public:int diagonalSum(vectorvectorint mat) {int res0;int nmat.size();for(int i0;in;i){resmat[i][i]mat[i][n-i-1];}if(n%21) res-mat[n/2][n/2];return res;}
};