1314. Matrix Block Sum
Solution
先求出rangeSum
int[][] rangeSum = new int[m+1][n+1];
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n ; j++){
rangeSum[i][j] = rangeSum[i-1][j] + rangeSum[i][j-1] - rangeSum[i-1][j-1] + mat[i-1][j-1];
}
}
再透過rangeSum求出block sum

int[][] ans = new int[m][n];
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
int r1 = Math.max(0, i-K);
int r2 = Math.min(m-1, i+K);
int c1 = Math.max(0, j-K);
int c2 = Math.min(n-1, j+K);
r1++;r2++;c1++;c2++; //rangeSum start from 1
ans[i][j] = rangeSum[r2][c2] - rangeSum[r1-1][c2] - rangeSum[r2][c1-1] + rangeSum[r1-1][c1-1];
}
}
return ans;
Last updated
Was this helpful?