1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| class Solution { public: int get(vector <vector<int>> &arr,int m, int n, int x, int y ) { x = min(max(x, 0), m); y = min(max(y, 0), n); return arr[x][y]; }
vector <vector<int>> matrixBlockSum(vector <vector<int>> &mat, int k) { int m = mat.size(), n = mat[0].size(); vector <vector<int>> sum(m + 1, vector<int>(n + 1)); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { sum[i][j] = mat[i - 1][j - 1] + sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1]; } } vector <vector<int>> ans(m, vector<int>(n)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { ans[i][j] = get(sum, m, n, i + k + 1, j + k+ 1) - get(sum, m, n, i - k, j + k + 1) - get(sum, m, n, i + k + 1, j - k) + get(sum, m, n, i - k, j - k); } }
return ans; } };
|