leetcode 2536.子矩阵元素加一
1.题目要求:
给你一个正整数 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
输入:n = 3, queries = [[1,1,2,2],[0,0,1,1]]
输出:[[1,1,0],[1,2,1],[0,1,1]]
解释:上图所展示的分别是:初始矩阵、执行完第一个操作后的矩阵、执行完第二个操作后的矩阵。
- 第一个操作:将左上角为 (1, 1) 且右下角为 (2, 2) 的子矩阵中的每个元素加 1 。
- 第二个操作:将左上角为 (0, 0) 且右下角为 (1, 1) 的子矩阵中的每个元素加 1 。
输入:n = 2, queries = [[0,0,1,1]]
输出:[[1,1],[1,1]]
解释:上图所展示的分别是:初始矩阵、执行完第一个操作后的矩阵。
- 第一个操作:将矩阵中的每个元素加 1 。
题目代码:
class Solution {
public:
//再此函数进行数组加一的过程
void rangeadd(vector<vector<int>>&result,vector<int>& index){
int i,j;
for(i = index[0];i <= index[2];i++){
for(j = index[1];j <= index[3];j++){
result[i][j] += 1;
}
}
}
vector<vector<int>> rangeAddQueries(int n, vector<vector<int>>& queries) {
vector<vector<int>> result;//创造二维容器
//给二维容器初始化为0
result.resize(n);
for(int i = 0;i < n;i++){
result[i].resize(n,0);
}
//再把queries数组的每一行和result一起传递
for(int i = 0;i < queries.size();i++){
rangeadd(result,queries[i]);
}
return result;
}
};