码迷,mamicode.com
首页 > 其他好文 > 详细

304. Range Sum Query 2D - Immutable

时间:2021-03-04 13:16:07      阅读:0      评论:0      收藏:0      [点我收藏+]

标签: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中的和。可以得到公式

sums[row2+1][col2+1]-sums[row1][col2+1]-sums[row2+1][col1]+sums[row1][col1]
 
代码:
 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!