📜  矩阵对角线和 leetcode - Python (1)

📅  最后修改于: 2023-12-03 15:11:23.418000             🧑  作者: Mango

矩阵对角线和 - LeetCode

题目描述

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

只需要实现一个函数 diagonalSum(mat: List[List[int]]) -> int 即可。

示例 1:

输入: 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
解法

题目要求返回矩阵对角线元素的和,可以分两种情况讨论。

  • 对角线上元素的下标为 i 时,有两种情况:i == j 或者 i == n - j - 1,此处的 n 是矩阵的行数和列数。

  • 如果矩阵的行数和列数是奇数,那么它的中心点也属于对角线元素的一部分。

代码
class Solution:
    def diagonalSum(self, mat: List[List[int]]) -> int:
        rows, cols = len(mat), len(mat[0])
        res = 0
        for i in range(rows):
            for j in range(cols):
                if i == j or i + j == rows - 1:
                    res += mat[i][j]
        if rows % 2 == 1:
            res -= mat[rows // 2][cols // 2]
        return res

这里使用双层循环遍历矩阵,根据上面讨论的两种情况,得到对角线上的元素,并累加其和。如果矩阵的行数和列数都是奇数,那么中心点的位置被重复计算了一次,需要减去它的值。