1、很明显,对于内层需要上下左右八个方向的计算,边界则随位置而定。这里为求简便,就直接每个元素把八个方向来一遍。
2、这里使用vector
class Solution {
public:
vector<vector<int>> imageSmoother(vector<vector<int>>& M) {
if(M.empty())
return vector<vector<int>>();
int m = M.size();
int n = M[0].size();
vector<vector<int>> Result(m, vector<int>(n));
vector<pair<int, int>> Directions({{-1, 0}, {-1, 1}, {-1, -1}, {0, 1}, {0, -1}, {1, 0}, {1, 1}, {1, -1}});
vector<pair<int, int>>::iterator iter;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
int validEle = 1;
int Value = M[i][j];
for(iter = Directions.begin(); iter != Directions.end(); iter++){
int dirI = (*iter).first + i;
int dirJ = (*iter).second + j;
if(dirI < m && dirI >= 0 && dirJ < n && dirJ >= 0){
validEle++;
Value += M[dirI][dirJ];
}
}
Result[i][j] = Value / validEle;
}
}
return Result;
}
};