304. 二维区域和检索 - 矩阵不可变
1 class NumMatrix 2 { 3 vector<vector<int>> s; 4 public: 5 NumMatrix(vector<vector<int>>& matrix) 6 { 7 if(matrix.empty() || matrix[0].empty()) return; 8 int m = matrix.size(); 9 int n = matrix[0].size(); 10 s = vector<vector<int>>(m + 1,vector<int>(n + 1,0)); 11 for(int i = 1;i <= m;i ++) 12 { 13 for(int j = 1;j <= n;j ++) 14 { 15 //根据表格分析可得 16 //s[2,2] = s[1,2] + s[2,1] - s[1,1] + matrix[1,1]; 17 s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + matrix[i - 1][j - 1]; 18 } 19 } 20 } 21 22 //(x1,y1),(x2,y2)这一子矩阵中所有数的和:s[x2,y2] - s[x1 - 1,y2] - s[x2,y1 - 1] + s[x1 - 1,y1 - 1] 23 //由于下标从1开始,所以横纵坐标都加上1 24 int sumRegion(int row1, int col1, int row2, int col2) 25 { 26 return s[row2 + 1][col2 + 1] - s[row2 + 1][col1] - s[row1][col2 + 1] + s[row1][col1]; 27 } 28 }; 29 30 /** 31 * Your NumMatrix object will be instantiated and called as such: 32 * NumMatrix* obj = new NumMatrix(matrix); 33 * int param_1 = obj->sumRegion(row1,col1,row2,col2); 34 */
Mamba never out

浙公网安备 33010602011771号