classNumMatrix:def__init__(self,matrix:List[List[int]]):m,n=len(matrix),len(matrix[0])self.s=[[0]*(n+1)for_inrange(m+1)]fori,rowinenumerate(matrix):forj,vinenumerate(row):self.s[i+1][j+1]=(self.s[i][j+1]+self.s[i+1][j]-self.s[i][j]+v)defsumRegion(self,row1:int,col1:int,row2:int,col2:int)->int:return(self.s[row2+1][col2+1]-self.s[row2+1][col1]-self.s[row1][col2+1]+self.s[row1][col1])# Your NumMatrix object will be instantiated and called as such:# obj = NumMatrix(matrix)# param_1 = obj.sumRegion(row1,col1,row2,col2)
1 2 3 4 5 6 7 8 91011121314151617181920212223
classNumMatrix{privateint[][]s;publicNumMatrix(int[][]matrix){intm=matrix.length,n=matrix[0].length;s=newint[m+1][n+1];for(inti=0;i<m;++i){for(intj=0;j<n;++j){s[i+1][j+1]=s[i+1][j]+s[i][j+1]-s[i][j]+matrix[i][j];}}}publicintsumRegion(introw1,intcol1,introw2,intcol2){returns[row2+1][col2+1]-s[row2+1][col1]-s[row1][col2+1]+s[row1][col1];}}/** * Your NumMatrix object will be instantiated and called as such: * NumMatrix obj = new NumMatrix(matrix); * int param_1 = obj.sumRegion(row1,col1,row2,col2); */
1 2 3 4 5 6 7 8 9101112131415161718192021222324
classNumMatrix{public:vector<vector<int>>s;NumMatrix(vector<vector<int>>&matrix){intm=matrix.size(),n=matrix[0].size();s.resize(m+1,vector<int>(n+1));for(inti=0;i<m;++i){for(intj=0;j<n;++j){s[i+1][j+1]=s[i+1][j]+s[i][j+1]-s[i][j]+matrix[i][j];}}}intsumRegion(introw1,intcol1,introw2,intcol2){returns[row2+1][col2+1]-s[row2+1][col1]-s[row1][col2+1]+s[row1][col1];}};/** * Your NumMatrix object will be instantiated and called as such: * NumMatrix* obj = new NumMatrix(matrix); * int param_1 = obj->sumRegion(row1,col1,row2,col2); */
typeNumMatrixstruct{s[][]int}funcConstructor(matrix[][]int)NumMatrix{m,n:=len(matrix),len(matrix[0])s:=make([][]int,m+1)fori:=ranges{s[i]=make([]int,n+1)}fori,row:=rangematrix{forj,v:=rangerow{s[i+1][j+1]=s[i+1][j]+s[i][j+1]-s[i][j]+v}}returnNumMatrix{s}}func(this*NumMatrix)SumRegion(row1int,col1int,row2int,col2int)int{returnthis.s[row2+1][col2+1]-this.s[row2+1][col1]-this.s[row1][col2+1]+this.s[row1][col1]}/** * Your NumMatrix object will be instantiated and called as such: * obj := Constructor(matrix); * param_1 := obj.SumRegion(row1,col1,row2,col2); */
classNumMatrix{privates:number[][];constructor(matrix:number[][]){constm=matrix.length;constn=matrix[0].length;this.s=newArray(m+1).fill(0).map(()=>newArray(n+1).fill(0));for(leti=0;i<m;++i){for(letj=0;j<n;++j){this.s[i+1][j+1]=this.s[i+1][j]+this.s[i][j+1]-this.s[i][j]+matrix[i][j];}}}sumRegion(row1:number,col1:number,row2:number,col2:number):number{return(this.s[row2+1][col2+1]-this.s[row2+1][col1]-this.s[row1][col2+1]+this.s[row1][col1]);}}/** * Your NumMatrix object will be instantiated and called as such: * var obj = new NumMatrix(matrix) * var param_1 = obj.sumRegion(row1,col1,row2,col2) */
/** * Your NumMatrix object will be instantiated and called as such: * let obj = NumMatrix::new(matrix); * let ret_1: i32 = obj.sum_region(row1, col1, row2, col2); */structNumMatrix{// Of size (N + 1) * (M + 1)prefix_vec:Vec<Vec<i32>>,n:usize,m:usize,is_initialized:bool,ref_vec:Vec<Vec<i32>>,}/** * `&self` means the method takes an immutable reference. * If you need a mutable reference, change it to `&mut self` instead. */implNumMatrix{fnnew(matrix:Vec<Vec<i32>>)->Self{NumMatrix{prefix_vec:vec![vec![0;matrix[0].len()+1];matrix.len()+1],n:matrix.len(),m:matrix[0].len(),is_initialized:false,ref_vec:matrix,}}fnsum_region(&mutself,row1:i32,col1:i32,row2:i32,col2:i32)->i32{if!self.is_initialized{self.initialize_prefix_vec();}// Since i32 will let `rustc` complain, just make it happyletrow1:usize=row1asusize;letcol1:usize=col1asusize;letrow2:usize=row2asusize;letcol2:usize=col2asusize;// Return the value in O(1)self.prefix_vec[row2+1][col2+1]-self.prefix_vec[row2+1][col1]-self.prefix_vec[row1][col2+1]+self.prefix_vec[row1][col1]}fninitialize_prefix_vec(&mutself){// Initialize the prefix sum vectorforiin0..self.n{forjin0..self.m{self.prefix_vec[i+1][j+1]=self.prefix_vec[i][j+1]+self.prefix_vec[i+1][j]-self.prefix_vec[i][j]+self.ref_vec[i][j];}}self.is_initialized=true;}}
classNumMatrix(matrix:Array<IntArray>){privatevaln:Intprivatevalm:Intprivatevalmatrix:Array<IntArray>privatevalprefix_sums_matrix:Array<IntArray>privatevarinitialized:Booleaninit{this.n=matrix.sizethis.m=matrix[0].sizethis.matrix=matrixthis.prefix_sums_matrix=Array(n+1){IntArray(m+1)}this.initialized=false}funsumRegion(row1:Int,col1:Int,row2:Int,col2:Int):Int{this.init()returnthis.prefix_sums_matrix[row2+1][col2+1]-this.prefix_sums_matrix[row2+1][col1]-this.prefix_sums_matrix[row1][col2+1]+this.prefix_sums_matrix[row1][col1]}privatefuninit():Boolean{if(!this.initialized){for(iin0..<this.n){for(jin0..<this.m){this.prefix_sums_matrix[i+1][j+1]=this.prefix_sums_matrix[i+1][j]+this.prefix_sums_matrix[i][j+1]-this.prefix_sums_matrix[i][j]+this.matrix[i][j]}}this.initialized=truereturntrue}returnfalse}}/** * Your NumMatrix object will be instantiated and called as such: var obj = NumMatrix(matrix) var * param_1 = obj.sumRegion(row1,col1,row2,col2) */