303. 区域和检索 - 数组不可变 304. 二维区域和检索 - 矩阵不可变
题解
两道题都属于入门的dp题 但是304难度高一些 主要在于如何推导保存处理值
class NumArray {
int[] dps;
public NumArray(int[] nums) {
dps = new int[nums.length];
if (nums.length == 0) return;
dps[0] = nums[0];
for (int i = 1; i < nums.length;i++){
dps[i] = dps[i - 1] + nums[i];
}
}
public int sumRange(int i, int j) {
if (i == 0) return dps[j];
return dps[j] - dps[i - 1];
}
}
/**
* Your NumArray object will be instantiated and called as such:
* NumArray obj = new NumArray(nums);
* int param_1 = obj.sumRange(i,j);
*/
class NumMatrix {
int [][] dps;
public NumMatrix(int[][] matrix) {
int m = matrix.length;
if (m == 0) return;
int n = matrix[0].length;
dps = new int[m][n];
for (int i = 0 ; i < m;i++){
for (int j = 0; j < n;j++){
int value = matrix[i][j];
if (i - 1 >=0 && j -1 >=0){
value -= dps[i - 1][j - 1];
}
if (i - 1 >=0){
value += dps[i -1][j];
}
if (j - 1 >= 0){
value += dps[i][j - 1];
}
dps[i][j] = value;
}
}
}
public int sumRegion(int row1, int col1, int row2, int col2) {
return (col1 - 1>= 0 ?-dps[row2][col1 - 1] : 0)
+ (row1 - 1>= 0 ?- dps[row1 - 1][col2] : 0)
+ dps[row2][col2]
+ (row1 - 1>= 0 && col1 - 1>= 0 ? dps[row1 - 1][col1 - 1] :0);
}
}
/**
* Your NumMatrix object will be instantiated and called as such:
* NumMatrix obj = new NumMatrix(matrix);
* int param_1 = obj.sumRegion(row1,col1,row2,col2);
*/