本文主要是介绍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
方法一:直接嵌套循环无脑输出:
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;}
}
方法二:枚举对角线元素:
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&1return sum;}
}
PS: n&1为什么能够判断奇偶,是因为在二进制中,奇数的最低位一定是1,偶数的最低位一定是0。所以无论其他位是什么,取决奇偶性的在于最低位。1&1=1,故为奇数;0&1=0,故为偶数。
这篇关于Leetcode-1572. 矩阵对角线元素的和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!