【1572. 矩阵对角线元素的和】

来源:力扣(LeetCode)

描述:

给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。

请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。

示例 1:

cpp 复制代码
输入:mat = [[1,2,3],
            [4,5,6],
            [7,8,9]]
输出:25
解释:对角线的和为:1 + 5 + 9 + 3 + 7 = 25
请注意,元素 mat[1][1] = 5 只会被计算一次。

示例 2:

cpp 复制代码
输入:mat = [[1,1,1,1],
            [1,1,1,1],
            [1,1,1,1],
            [1,1,1,1]]
输出:8

示例 3:

cpp 复制代码
输入:mat = [[5]]
输出:5

提示:

  • n == mat.length == mat[i].length
  • 1 <= n <= 100
  • 1 <= mat[i][j] <= 100

方法一:遍历矩阵

思路与算法

我们知道矩阵中某个位置 (i, j) 处于对角线上,则一定满足下列条件之一:

  • i = j;
  • i + j = n − 1;

根据上述结论,我们可以遍历整个矩阵,如果当前坐标 (i, j) 满足 i = j 或者 i + j = n − 1 则表示该位置一定在对角线上,则把当前的数字加入到答案之中。

代码:

cpp 复制代码
class Solution {
public:
    int diagonalSum(vector<vector<int>>& mat) {
        int n = mat.size(), 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;
    }
};

时间 12ms 击败 77.20%使用 C++ 的用户

内存 10.61mb 击败 89.00%使用 C++ 的用户
复杂度分析

  • 时间复杂度:O(n^2^),其中 n 是矩阵 mat 的行数。
  • 空间复杂度:O(1)。

方法二:枚举对角线元素

思路与算法

逐行遍历,记当前的行号为 i,则当前行中处于对角线的元素为: 坐标 (i, i) 和坐标 (i, n − i − 1),因此我们把 (i, i) 与 (i, n − i − 1) 处的数字加入到答案中。 如果 n 是奇数的话,则主对角线与副对角线存在交点 (⌊ n 2 n \over 2 2n⌋, ⌊ n 2 n \over 2 2n⌋),该点会被计算两次。所以当 n 为奇数的时候,需要减掉交点处的值。

代码:

cpp 复制代码
class Solution {
public:
    int diagonalSum(vector<vector<int>>& mat) {
        int n = mat.size(), 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);
    }
};

时间 12ms 击败 77.20%使用 C++ 的用户

内存 10.68mb 击败 54.80%使用 C++ 的用户
复杂度分析

  • 时间复杂度:O(n),其中 n 是矩阵 mat 的行数。
  • 空间复杂度:O(1)。
    author:力扣官方题解
相关推荐
桃酥40317 分钟前
20、移动语义有什么作用,原理是什么【中高频】
c++
闻缺陷则喜何志丹17 分钟前
【二分查找、滑动窗口】P10389 [蓝桥杯 2024 省 A] 成绩统计|普及+
c++·算法·蓝桥杯·二分查找·滑动窗口·洛谷·成绩
星空露珠1 小时前
迷你世界脚本显示板管理接口:DisPlayBoard
数据结构·游戏·lua
商bol451 小时前
算阶,jdk和idea的安装
数据结构·c++·算法
yyytucj1 小时前
C/C++通过SQLiteSDK增删改查
c语言·jvm·c++
冱洇3 小时前
168. Excel 表列名称
leetcode
CS创新实验室3 小时前
《机器学习数学基础》补充资料:过渡矩阵和坐标变换推导
人工智能·机器学习·矩阵·机器学习数学基础
蚂蚁质量3 小时前
在MATLAB环境中,对矩阵拼接(Matrix Concatenation)的测试
matlab·矩阵
柠檬鲨_4 小时前
C语言100天练习题【记录本】
c语言·数据结构·算法
float_六七4 小时前
二叉树三种遍历方式——前序、中序、后序(C++)
开发语言·c++·算法