每日一题:1314. 矩阵区域和
vector<vector<int>> prefix(mat.size() + 1, vector<int>(mat[0].size() + 1, 0));
for(int i = 1; i <= mat.size(); i++)
{
for(int j = 1; j <= mat[0].size(); j++)
{
prefix[i][j] = prefix[i - 1][j] + prefix[i][j - 1] - prefix[i - 1][j - 1] + mat[i - 1][j - 1];
}
}
vector<vector<int>> ret(mat.size(), vector<int>(mat[0].size(), 0));
for(int i = 0; i < ret.size(); i++)
{
for(int j = 0; j < ret[0].size(); j++)
{
int ri = i + k + 1 >= prefix.size() ? prefix.size() - 1 : i + k + 1;
int rj = j + k + 1 >= prefix[0].size() ? prefix[0].size() - 1 : j + k + 1;
int li = i - k < 0 ? 0 : i - k;
int lj = j - k < 0 ? 0 : j - k;
ret[i][j] = prefix[ri][rj] - prefix[ri][lj] - prefix[li][rj] + prefix[li][lj];
}
}
return ret;