算法leetcode1572. 矩阵对角线元素的和(多语言实现)

Posted 二当家的白帽子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法leetcode1572. 矩阵对角线元素的和(多语言实现)相关的知识,希望对你有一定的参考价值。


文章目录


1572. 矩阵对角线元素的和:

给你一个正方形矩阵 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

分析

  • 面对这道算法题目,二当家的陷入了沉思。
  • 如果不思考,直接按照题意照做,那么直观的做法就是从左上角遍历到右下角,再从右上角遍历到左下角,同时判断奇数中心点,不要重复加。
  • 其实也可以按行遍历一次,每行添加2个数,中心点的问题,可以在循环中判断,但是要做n次判断,不如在遍历完之后,判断如果是奇数,减去重复的中心点即可。

题解

rust

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
    


go

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


typescript

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;
;

python

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


c

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;


c++

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;
    
;

java

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://leetcode.cn/problems/matrix-diagonal-sum/


非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


以上是关于算法leetcode1572. 矩阵对角线元素的和(多语言实现)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 1572. 矩阵对角线元素的和

LeetCode刷题(145)~矩阵对角线元素的和

Leetcode 1572. Matrix Diagonal Sum

常用算法——矩阵对角线元素的表示

编程实现:输入一个 n*n 的矩阵,求出两条对角线元素值之和。

LeetCode 498. 对角线遍历c++/java详细题解