给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2)。

上图子矩阵左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),该子矩形内元素的总和为8。
示例:
给定 matrix = [
  [3, 0, 1, 4, 2],
  [5, 6, 3, 2, 1],
  [1, 2, 0, 1, 5],
  [4, 1, 0, 1, 7],
  [1, 0, 3, 0, 5]
]
sumRegion(2, 1, 4, 3) -> 8
sumRegion(1, 1, 2, 2) -> 11
sumRegion(1, 2, 2, 4) -> 12
注意:
    你可以假设矩阵不可变。
    会多次调用 sumRegion方法。
    你可以假设 row1 ≤ row2 且 col1 ≤ col2。

C++:

class NumMatrix {
public:
NumMatrix(vector<vector<int>> matrix) {
if(matrix.empty()||matrix[0].empty())
{
return;
}
dp.resize(matrix.size()+1,vector<int>(matrix[0].size()+1,0));
for(int i=1;i<=matrix.size();++i)
{
for(int j=1;j<=matrix[0].size();++j)
{
dp[i][j]=dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1]+matrix[i-1][j-1];
}
}
} int sumRegion(int row1, int col1, int row2, int col2) {
return dp[row2+1][col2+1]-dp[row1][col2+1]-dp[row2+1][col1]+dp[row1][col1];
}
private:
vector<vector<int>> dp;
}; /**
* Your NumMatrix object will be instantiated and called as such:
* NumMatrix obj = new NumMatrix(matrix);
* int param_1 = obj.sumRegion(row1,col1,row2,col2);
*/

参考:https://www.cnblogs.com/grandyang/p/4958789.html

最新文章

  1. 异步任务队列Celery在Django中的使用
  2. android开发之存储数据
  3. 常用的python模块
  4. CentOS 6.3下NTP服务安装和配置
  5. (jquery+ajax)省市区三级联动(封装和不封装两种方式)-----2017-05-14
  6. 使用redis做mybaties的二级缓存(2)-Mybatis 二级缓存小心使用
  7. Coin Change (IV) (dfs)
  8. 事件 event
  9. SpringCloud的应用发布(二)vmvare+linux,Centos7.0下发布应用
  10. UNIX网络编程——epoll的 et,lt关注点
  11. EasyUI整合篇
  12. expect 批量自动部署ssh 免密登陆 之 三
  13. C语言面试题分类-&gt;字符串处理
  14. Maven私服nexus
  15. maven scope使用和理解
  16. 微信小程序页面带参数跳转及接收参数内容navigator
  17. 返回最小的k个数
  18. robot framework学习笔记之七—连接mysql数据库
  19. LVS入门篇(三)之LVS的工作模式和调度算法
  20. sqoop数据校验

热门文章

  1. rsync远程文件传输
  2. Codeforces Gym100495 B、D、E、F、K
  3. cogs——8. 备用交换机
  4. 洛谷——P1036 选数
  5. Java使用Memcached和Redis简单示例
  6. yarn-cli 添加
  7. 量化分析师的Python日记【第1天:谁来给我讲讲Python?】
  8. JSON入门指南
  9. linux启动基本流程
  10. 洛谷 P1525 关押罪犯==codevs 1069 关押罪犯[NOIP 2010]