【LetMeFly】1572.矩阵对角线元素的和
力扣题目链接:https://leetcode.cn/problems/matrix-diagonal-sum/
给你一个正方形矩阵 mat
,请你返回矩阵对角线元素的和。
请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。
示例 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
提示:
n == mat.length == mat[i].length
1 <= n <= 100
1 <= mat[i][j] <= 100
方法一:模拟
假设 m a t mat mat的大小是 n × n n\times n n×n,则可以:
用 i i i从 0 0 0到 n − 1 n - 1 n−1遍历 m a t mat mat的每一行, a n s ans ans加上这一行的 i i i和 n − i − 1 n - i - 1 n−i−1。
最后,如果 n n n是奇数,则还需要减去对主副对角线重叠的元素 m a t [ ⌊ n 2 ⌋ ] [ ⌊ n 2 ⌋ ] mat[\lfloor\frac{n}{2}\rfloor][\lfloor\frac{n}{2}\rfloor] mat[⌊2n⌋][⌊2n⌋]文章来源:https://www.toymoban.com/news/detail-641868.html
- 时间复杂度 O ( n ) O(n) O(n),其中 s i z e ( m a t ) = n × n size(mat) = n\times n size(mat)=n×n
- 空间复杂度 O ( 1 ) O(1) O(1)
AC代码
C++
class Solution {
public:
int diagonalSum(vector<vector<int>>& mat) {
int n = mat.size();
int ans = 0;
for (int i = 0; i < n; i++) {
ans += mat[i][i] + mat[i][n - i - 1];
}
if (n % 2) {
ans -= mat[n / 2][n / 2];
}
return ans;
}
};
Python
# from typing import List
class Solution:
def diagonalSum(self, mat: List[List[int]]) -> int:
n = len(mat)
ans = 0
for i in range(n):
ans += mat[i][i] + mat[i][n - i - 1]
if n % 2:
ans -= mat[n // 2][n // 2]
return ans
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/132223172文章来源地址https://www.toymoban.com/news/detail-641868.html
到了这里,关于LeetCode 1572. 矩阵对角线元素的和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!