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

方法一:直接嵌套循环无脑输出:

java 复制代码
class Solution {
    public int diagonalSum(int[][] mat) {
        int sum = 0;
        for(int i = 0 ;  i < mat.length ; i++){
            for(int j = 0 ; j < mat[i].length ; j++){
                if(i==j){
                sum += mat[i][j];
                break;
                }
            }
            for(int j = mat[i].length-1 ; j >= 0 ; j--){
                if(i+j==mat.length-1){
                    sum += mat[i][j];
                    break;
                }
            }
        }
        if(mat.length%2!=0){
        sum-=mat[(mat.length-1)/2][(mat.length-1)/2];
        }
        return sum;
    }
}

方法二:枚举对角线元素:

java 复制代码
class Solution {
    public int diagonalSum(int[][] mat) {
        /*
        如果记行号为i,则当前下处于对角线的元素为:(i,i)和(i,n-i-1)
        并且当n为奇数,最中间交叉处的值会被加两次,所以得减掉一次。
         */
         int  n = mat.length , sum = 0;
         for(int i = 0 ; i < n ; i ++){
             sum+=mat[i][i] + mat[i][n-i-1];
         }
         if(n%2!=0) return sum-mat[n/2][n/2];//判断奇偶性还可以用n&1
         return sum;
    }
}

PS: n&1为什么能够判断奇偶,是因为在二进制中,奇数的最低位一定是1,偶数的最低位一定是0。所以无论其他位是什么,取决奇偶性的在于最低位。1&1=1,故为奇数;0&1=0,故为偶数。

相关推荐
一丝晨光3 分钟前
Java、PHP、ASP、JSP、Kotlin、.NET、Go
java·kotlin·go·php·.net·jsp·asp
罗曼蒂克在消亡7 分钟前
2.3MyBatis——插件机制
java·mybatis·源码学习
_GR19 分钟前
每日OJ题_牛客_牛牛冲钻五_模拟_C++_Java
java·数据结构·c++·算法·动态规划
ROBIN__dyc31 分钟前
表达式
算法
无限大.32 分钟前
c语言200例 067
java·c语言·开发语言
余炜yw33 分钟前
【Java序列化器】Java 中常用序列化器的探索与实践
java·开发语言
攸攸太上33 分钟前
JMeter学习
java·后端·学习·jmeter·微服务
无限大.34 分钟前
c语言实例
c语言·数据结构·算法
Kenny.志36 分钟前
2、Spring Boot 3.x 集成 Feign
java·spring boot·后端
六点半88838 分钟前
【C++】速通涉及 “vector” 的经典OJ编程题
开发语言·c++·算法·青少年编程·推荐算法