classSolution{public:intnumSubmatrixSumTarget(vector<vector<int>>&matrix,inttarget){constintm=matrix.size();constintn=matrix[0].size();intans=0;// Transfer each row of matrix to prefix sumfor(auto&row:matrix)for(inti=1;i<n;++i)row[i]+=row[i-1];for(intbaseCol=0;baseCol<n;++baseCol)for(intj=baseCol;j<n;++j){unordered_map<int,int>prefixCount{{0,1}};intsum=0;for(inti=0;i<m;++i){if(baseCol>0)sum-=matrix[i][baseCol-1];sum+=matrix[i][j];if(prefixCount.count(sum-target))ans+=prefixCount[sum-target];++prefixCount[sum];}}returnans;}};
classSolution{publicintnumSubmatrixSumTarget(int[][]matrix,inttarget){finalintm=matrix.length;finalintn=matrix[0].length;intans=0;// Transfer each row of matrix to prefix sumfor(int[]row:matrix)for(inti=1;i<n;++i)row[i]+=row[i-1];for(intbaseCol=0;baseCol<n;++baseCol)for(intj=baseCol;j<n;++j){Map<Integer,Integer>prefixCount=newHashMap<>();prefixCount.put(0,1);intsum=0;for(inti=0;i<m;++i){if(baseCol>0)sum-=matrix[i][baseCol-1];sum+=matrix[i][j];ans+=prefixCount.getOrDefault(sum-target,0);prefixCount.put(sum,prefixCount.getOrDefault(sum,0)+1);}}returnans;}}
classSolution:defnumSubmatrixSumTarget(self,matrix:List[List[int]],target:int)->int:m=len(matrix)n=len(matrix[0])ans=0# Transfer each row of matrix to prefix sumforrowinmatrix:foriinrange(1,n):row[i]+=row[i-1]forbaseColinrange(n):forjinrange(baseCol,n):prefixCount=Counter({0:1})summ=0foriinrange(m):ifbaseCol>0:summ-=matrix[i][baseCol-1]summ+=matrix[i][j]ans+=prefixCount[summ-target]prefixCount[summ]+=1returnans