【日更刷题】1572. 矩阵对角线元素的和

153 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

一、题目描述:

1572. 矩阵对角线元素的和 - 力扣(LeetCode) 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。

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

 

示例  1:

image.png

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

示例  2:

输入:mat = [[1,1,1,1],
            [1,1,1,1],
            [1,1,1,1],
            [1,1,1,1]]
输出:8

示例 3:

输入:mat = [[5]]
输出:5

 

提示:

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

二、思路分析:

  1. 首先判断如果正方形矩阵的行列数为奇数,则最中间的元素会算两次,如果正方形矩阵行列数为偶数,则没有最中间元素,没有算两次的元素,因此先确定mid变量的值,再从最终总和中减去即可。
  2. 设定一个temp索引指针,等于矩阵的最大索引数。
  3. 使用for遍历,依次对sum求和,使其等于主对角线各元素和副对角线各元素的和。
  4. 返回总和减去中间元素值的结果。

三、AC 代码:

class Solution {
    public int diagonalSum(int[][] mat) {
        int row = mat.length;
        int mid = 0;
        int sum = 0;
        if(row % 2 != 0){
            mid = mat[(row-1)/2][(row-1)/2];
        }
        int temp = row - 1;
        for(int i = 0; i < row; i++){
            sum = sum + mat[i][i] + mat[i][temp];
            temp--;
        }
        return sum - mid;
    }
}

五、分析:

【矩阵对角线元素的和】【C语言详解】 - 矩阵对角线元素的和 - 力扣(LeetCode)

图解:1种嵌套循环的方式,1种只需要单循环的方式;思路循序渐进 - 矩阵对角线元素的和 - 力扣(LeetCode)

【GcsSloop】JavaScript 超高效率解法(击败100%) - 矩阵对角线元素的和 - 力扣(LeetCode)