标签:reg cal object ret 代码 如何 下标 tab 思路
仅供自己学习
思路:
这个题和上一个题目类似,都是先存储从起始位置到该位置的和。唯一需要特别处理的就是怎么求和。
这里得注意sums的下标与矩阵下标的关系。可以画出一个矩阵,能得到 sums[i+1][j+1]=sums[i+1][j]+sums[i][j+1]-sums[i][j]+matrix[i][j]这个公式,当解决出该求和公式,通过两个for循环对每个位置的和求出,记录即可。
sumRange返回的的和也是通过画出一个矩阵推出,需要明确,sums不使用第一行和第一列,而是从[1][1]开始记录矩阵和,所以要明确传入参数row1,row2,col1,col2分别在matrix的哪个位置,在sums这个矩阵又是哪几个位置,如何通过改变这几个参数而才能正确获得需要的sums中的和。可以得到公式
1 class NumMatrix { 2 public: 3 vector<vector<int>> sums; 4 NumMatrix(vector<vector<int>>& matrix) { 5 if(matrix.size()>0){ 6 int r=matrix.size(); 7 int c=matrix[0].size(); 8 sums.resize(r+1,vector<int> (c+1)); 9 for(int i=0;i<r;++i){ 10 for(int j=0;j<c;++j){ 11 sums[i+1][j+1]=sums[i+1][j]+sums[i][j+1]-sums[i][j]+matrix[i][j]; 12 } 13 } 14 } 15 16 } 17 18 int sumRegion(int row1, int col1, int row2, int col2) { 19 return sums[row2+1][col2+1]-sums[row1][col2+1]-sums[row2+1][col1]+sums[row1][col1]; 20 } 21 }; 22 23 /** 24 * Your NumMatrix object will be instantiated and called as such: 25 * NumMatrix* obj = new NumMatrix(matrix); 26 * int param_1 = obj->sumRegion(row1,col1,row2,col2); 27 */
304. Range Sum Query 2D - Immutable
标签:reg cal object ret 代码 如何 下标 tab 思路
原文地址:https://www.cnblogs.com/Mrsdwang/p/14476807.html