给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。
请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。

输入:
mat = [[1,2,3],
[4,5,6],
[7,8,9]]
输出:
25
解释:
对角线的和为:1 + 5 + 9 + 3 + 7 = 25
请注意,元素 mat[1][1] = 5 只会被计算一次。
输入:
mat = [[1,1,1,1],
[1,1,1,1],
[1,1,1,1],
[1,1,1,1]]
输出:
8
输入:
mat = [[5]]
输出:
5
impl Solution {
pub fn diagonal_sum(mat: Vec<Vec<i32>>) -> i32 {
let n = mat.len();
let mut ans = mat.iter().enumerate().map(|(r, row)| {
row[r] + row[n - 1 - r]
}).sum();
if n & 1 == 1 {
ans -= mat[n / 2][n / 2];
}
ans
}
}
func diagonalSum(mat [][]int) int {
ans := 0
n := len(mat)
for r, row := range mat {
ans += row[r] + row[n-1-r]
}
if n&1 == 1 {
ans -= mat[n/2][n/2]
}
return ans
}
function diagonalSum(mat: number[][]): number {
let ans = 0;
const n = mat.length;
for (let r = 0; r < mat.length; ++r) {
ans += mat[r][r] + mat[r][n - 1 - r];
}
if ((n & 1) == 1) {
ans -= mat[Math.floor(n / 2)][Math.floor(n / 2)];
}
return ans;
};
class Solution:
def diagonalSum(self, mat: List[List[int]]) -> int:
ans = 0
n = len(mat)
for r in range(n):
ans += mat[r][r] + mat[r][n - 1 - r]
if n & 1 == 1:
ans -= mat[n // 2][n // 2]
return ans
int diagonalSum(int** mat, int matSize, int* matColSize){
int ans = 0;
for (int r = 0; r < matSize; ++r) {
ans += mat[r][r] + mat[r][matSize - 1 - r];
}
if (matSize & 1 == 1) {
ans -= mat[matSize / 2][matSize / 2];
}
return ans;
}
class Solution {
public:
int diagonalSum(vector<vector<int>>& mat) {
int ans = 0;
const int n = mat.size();
for (int r = 0; r < n; ++r) {
ans += mat[r][r] + mat[r][n - 1 - r];
}
if (n & 1 == 1) {
ans -= mat[n / 2][n / 2];
}
return ans;
}
};
class Solution {
public int diagonalSum(int[][] mat) {
int ans = 0;
int n = mat.length;
for (int r = 0; r < n; ++r) {
ans += mat[r][r];
ans += mat[r][n - 1 - r];
}
if ((n & 1) == 1) {
ans -= mat[n / 2][n / 2];
}
return ans;
}
}
非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~