题目描述
给定一个二维矩阵 matrix,以下类型的多个请求:
计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。
实现 NumMatrix 类:
NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化
int sumRegion(int row1, int col1, int row2, int col2) 返回左上角 (row1, col1) 、右下角 (row2, col2) 的子矩阵的元素总和。
分析
将二维数组转化为多个一维数组给定区间子数组的和,计算二维数组中每一个元素在该行的前缀和,组成一个新的前缀和矩阵matrix,第row行[col1 , col2]区间的和即为 matrix[row][col2] - matrix[row][col1-1] , col1 = 0特判即可。
C++代码
class NumMatrix {
public:
vector<vector<int>> matrixa;
int length;
NumMatrix(vector<vector<int>>& matrix) {
matrixa.swap(matrix);
int sum = 0;
length = matrixa.size();
for(int i=0;i<length;i++){
sum = 0;
for(int j=1;j<matrixa[i].size();j++){
matrixa[i][j]+=matrixa[i][j-1];
}
};
}
int sumRegion(int row1, int col1, int row2, int col2) {
int count = 0;
for(int i=row1;i<=row2;i++){
if(col1 >= 1) count += matrixa[i][col2] - matrixa[i][col1-1];
else{
count += matrixa[i][col2];
}
}
return count;
}
};