Leetecode 661, Image Smoother,难度easy
就是把一个矩阵周围的数字求和求平均取整,所以只要判断周围一共有多少个数,并且加起来就可以了。所以这里需要遍历一遍数组,把每一个数周围都处理一遍,在第二重循环里面有一个temp
记录周围的数的总和,count记录周围一共有多少个数,一个数不处在边界上都是八个数,所以需要判断周围的数有没有超出边界,没有加起来,最后求平均取整放入最终的矩阵中。
以下是代码。
class Solution {
public:
vector<vector<int>> imageSmoother(vector<vector<int>>& M) {
vector<vector<int>> res(M.size());
for (int i = 0; i < M.size(); i++) {
for (int j = 0; j < (M[i].size()); j++) {
if(j == 0) res[i].resize(M[i].size());
int a = j - 1, b = j + 1, c = i - 1, d = i + 1;
int temp = M[i][j], count = 1;
if(a >= 0) {
temp += M[i][a];
count++;
if(c >= 0) {
temp += M[c][a];
count++;
}
if(d <= M.size() - 1) {
temp += M[d][a];
count++;
}
}
if(b <= (M[i].size()) - 1) {
temp += M[i][b];
count++;
if(c >= 0) {
temp += M[c][b];
count++;
}
if(d <= M.size() - 1) {
temp += M[d][b];
count++;
}
}
if(c >= 0) {
count++;
temp += M[c][j];
}
if(d <= M.size() - 1) {
temp += M[d][j];
count++;
}
int r = (float) (temp / count);
res[i][j] = r;
}
}
return res;
}
};