論壇網(wǎng)站搭建網(wǎng)絡(luò)熱詞2022
【LetMeFly】1572.矩陣對(duì)角線元素的和
力扣題目鏈接:https://leetcode.cn/problems/matrix-diagonal-sum/
給你一個(gè)正方形矩陣 mat
,請(qǐng)你返回矩陣對(duì)角線元素的和。
請(qǐng)你返回在矩陣主對(duì)角線上的元素和副對(duì)角線上且不在主對(duì)角線上元素的和。
?
示例? 1:
輸入:mat = [[1,2,3],[4,5,6],[7,8,9]] 輸出:25 解釋:對(duì)角線的和為:1 + 5 + 9 + 3 + 7 = 25 請(qǐng)注意,元素 mat[1][1] = 5 只會(huì)被計(jì)算一次。
示例? 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
方法一:模擬
假設(shè) 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是奇數(shù),則還需要減去對(duì)主副對(duì)角線重疊的元素 m a t [ ? n 2 ? ] [ ? n 2 ? ] mat[\lfloor\frac{n}{2}\rfloor][\lfloor\frac{n}{2}\rfloor] mat[?2n??][?2n??]
- 時(shí)間復(fù)雜度 O ( n ) O(n) O(n),其中 s i z e ( m a t ) = n × n size(mat) = n\times n size(mat)=n×n
- 空間復(fù)雜度 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 Listclass Solution:def diagonalSum(self, mat: List[List[int]]) -> int:n = len(mat)ans = 0for i in range(n):ans += mat[i][i] + mat[i][n - i - 1]if n % 2:ans -= mat[n // 2][n // 2]return ans
同步發(fā)文于CSDN,原創(chuàng)不易,轉(zhuǎn)載請(qǐng)附上原文鏈接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/132223172