LeetCode 子矩阵元素加1
题目地址: https://leetcode.cn/problems/increment-submatrices-by-one/description/
给你一个正整数 n ,表示最初有一个 n x n 、下标从 0 开始的整数矩阵 mat ,矩阵中填满了 0 。
另给你一个二维整数数组 query 。针对每个查询 query[i] = [row1i, col1i, row2i, col2i] ,请你执行下述操作:
找出 左上角 为 (row1i, col1i) 且 右下角 为 (row2i, col2i) 的子矩阵,将子矩阵中的 每个元素 加 1 。也就是给所有满足 row1i <= x <= row2i 和 col1i <= y <= col2i 的 mat[x][y] 加 1 。
返回执行完所有操作后得到的矩阵 mat 。
// 思路: 二维差分func rangeAddQueries(n int, queries [][]int) [][]int {diff := make([][]int, n+2)for i := 0; i < n+2; i++ {diff[i] = make([]int, n+2)}for i := 0; i < len(queries); i++ {add(queries[i][0]+1, queries[i][1]+1, queries[i][2]+1, queries[i][3]+1, 1, diff)}build(diff, n)res := make([][]int, n)for i := 1; i <= n; i++ {res[i-1] = diff[i][1 : n+1]}return res
}func build(diff [][]int, n int) {for i := 1; i <= n; i++ {for j := 1; j <= n; j++ {diff[i][j] += diff[i-1][j] + diff[i][j-1] - diff[i-1][j-1]}}
}func add(a, b, c, d, k int, diff [][]int) {diff[a][b] += kdiff[c+1][b] -= kdiff[a][d+1] -= kdiff[c+1][d+1] += k
}
