本篇博客会讲解力扣“1572. 矩阵对角线元素的和”的解题思路,这是题目链接。
本题的思路是:主对角线的下标满足i == j
,副对角线的下标满足i + j == size - 1
,故只需要使用i遍历每一行,把(i, i)和(i, size - i - 1)的元素求和即可。
若size是奇数,则中心元素加了2次,还需要减掉1次。
int diagonalSum(int** mat, int matSize, int* matColSize){
int ret = 0;
for (int i = 0; i < matSize; ++i)
{
// 加上主副对角线上的元素
ret += mat[i][i] + mat[i][matSize-i-1];
}
// 若matSize是奇数,则中心元素加了两遍
if (matSize & 1)
{
ret -= mat[matSize/2][matSize/2];
}
return ret;
}
总结
- 主对角线的下标满足
i == j
,副对角线的下标满足i + j == size - 1
。 - 若size是偶数,则2条对角线不会交错;若size是奇数,则2条对角线会交错。
感谢大家的阅读!