diff --git a/leetcode/1572.Matrix-Diagonal-Sum/1572.Matrix Diagonal Sum.go b/leetcode/1572.Matrix-Diagonal-Sum/1572.Matrix Diagonal Sum.go new file mode 100644 index 00000000..4f1756a3 --- /dev/null +++ b/leetcode/1572.Matrix-Diagonal-Sum/1572.Matrix Diagonal Sum.go @@ -0,0 +1,16 @@ +package leetcode + +func diagonalSum(mat [][]int) int { + n := len(mat) + ans := 0 + for pi := 0; pi < n; pi++ { + ans += mat[pi][pi] + } + for si, sj := n-1, 0; sj < n; si, sj = si-1, sj+1 { + ans += mat[si][sj] + } + if n%2 == 0 { + return ans + } + return ans - mat[n/2][n/2] +} diff --git a/leetcode/1572.Matrix-Diagonal-Sum/1572.Matrix Diagonal Sum_test.go b/leetcode/1572.Matrix-Diagonal-Sum/1572.Matrix Diagonal Sum_test.go new file mode 100644 index 00000000..c658de14 --- /dev/null +++ b/leetcode/1572.Matrix-Diagonal-Sum/1572.Matrix Diagonal Sum_test.go @@ -0,0 +1,51 @@ +package leetcode + +import ( + "fmt" + "testing" +) + +type question1572 struct { + para1572 + ans1572 +} + +// para 是参数 +type para1572 struct { + mat [][]int +} + +// ans 是答案 +// one 代表第一个答案 +type ans1572 struct { + one int +} + +func Test_Problem1572(t *testing.T) { + + qs := []question1572{ + + { + para1572{[][]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}}, + ans1572{25}, + }, + + { + para1572{[][]int{{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}}}, + ans1572{8}, + }, + + { + para1572{[][]int{{5}}}, + ans1572{5}, + }, + } + + fmt.Printf("------------------------Leetcode Problem 1572------------------------\n") + + for _, q := range qs { + _, p := q.ans1572, q.para1572 + fmt.Printf("【input】:%v 【output】:%v \n", p, diagonalSum(p.mat)) + } + fmt.Printf("\n\n\n") +} diff --git a/leetcode/1572.Matrix-Diagonal-Sum/README.md b/leetcode/1572.Matrix-Diagonal-Sum/README.md new file mode 100644 index 00000000..d6ac2b8a --- /dev/null +++ b/leetcode/1572.Matrix-Diagonal-Sum/README.md @@ -0,0 +1,74 @@ +# [1572. Matrix Diagonal Sum](https://leetcode-cn.com/problems/matrix-diagonal-sum/) + + +## 题目 + +Given a square matrix mat, return the sum of the matrix diagonals. + +Only include the sum of all the elements on the primary diagonal and all the elements on the secondary diagonal that are not part of the primary diagonal. + +**Example 1:** + +``` +Input: mat = [[1,2,3], + [4,5,6], + [7,8,9]] +Output: 25 +Explanation: Diagonals sum: 1 + 5 + 9 + 3 + 7 = 25 +Notice that element mat[1][1] = 5 is counted only once. +``` + +**Example 2:** + +``` +Input: mat = [[1,1,1,1], + [1,1,1,1], + [1,1,1,1], + [1,1,1,1]] +Output: 8 +``` + +**Example 3:** + +``` +Input: mat = [[5]] +Output: 5 +``` + +**Constraints:** + +- n == mat.length == mat[i].length +- 1 <= n <= 100 +- 1 <= mat[i][j] <= 100 + +## 题目大意 + +给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 + +请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和 + +## 解题思路 + +- 根据题意,把主对角线和副对角线上的元素相加 +- 如果正方形矩阵的长度n为奇数,相加的结果需要减去mat[n/2][n/2] + +## 代码 + +```go +package leetcode + +func diagonalSum(mat [][]int) int { + n := len(mat) + ans := 0 + for pi := 0; pi < n; pi++ { + ans += mat[pi][pi] + } + for si, sj := n - 1, 0; sj < n; si, sj = si - 1, sj + 1 { + ans += mat[si][sj] + } + if n % 2 == 0 { + return ans + } + return ans - mat[n / 2][n / 2] +} +``` \ No newline at end of file