leetcode 1074. 元素和为目标值的子矩阵数量(map+前缀和)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 1074. 元素和为目标值的子矩阵数量(map+前缀和)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給出矩陣 matrix 和目標值 target,返回元素總和等于目標值的非空子矩陣的數量。
子矩陣 x1, y1, x2, y2 是滿足 x1 <= x <= x2 且 y1 <= y <= y2 的所有單元 matrix[x][y] 的集合。
如果 (x1, y1, x2, y2) 和 (x1’, y1’, x2’, y2’) 兩個子矩陣中部分坐標不同(如:x1 != x1’),那么這兩個子矩陣也不同。
示例 1:
輸入:matrix = [[0,1,0],[1,1,1],[0,1,0]], target = 0
輸出:4
解釋:四個只含 0 的 1x1 子矩陣。
示例 2:
輸入:matrix = [[1,-1],[-1,1]], target = 0
輸出:5
解釋:兩個 1x2 子矩陣,加上兩個 2x1 子矩陣,再加上一個 2x2 子矩陣。
示例 3:
輸入:matrix = [[904]], target = 0
輸出:0
解題思路
遍歷所有可以可選的上下邊界[i,j]。
代碼
func numSubmatrixSumTarget(matrix [][]int, target int) (res int) {for i := 0; i < len(matrix); i++ {col := make([]int, len(matrix[0]))for j := i; j < len(matrix); j++ {for z := 0; z < len(matrix[0]); z++ {col[z] += matrix[j][z]}func() {m := make(map[int]int)m[0] = 1cur := 0for i := 0; i < len(matrix[0]); i++ {cur += col[i]i2, has := m[cur-target]if has {res += i2}m[cur]++}}()}}return}總結
以上是生活随笔為你收集整理的leetcode 1074. 元素和为目标值的子矩阵数量(map+前缀和)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老是梦到拉屎怎么回事
- 下一篇: leetcode 5756. 两个数组最