add: leetcode 1572 solution

This commit is contained in:
tphyhFighting
2021-05-21 16:48:31 +08:00
parent 86370c1ac5
commit 36f3a4c757
3 changed files with 141 additions and 0 deletions

View File

@ -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]
}

View File

@ -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")
}

View File

@ -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]
}
```