num661图片平滑器
思路:枚举每一个数的前后左右相加然后取平均值,这道题比较费心思的部分在于如何把外围的数量和和算出来但是数组又不能越界,采取了官方的做法,设置了局部变量p,q然后从p-1,q-1开始而枚举,盘然后判断是否越界在赋值,代码如下
class Solution {
public:
vector<vector<int>> imageSmoother(vector<vector<int>>& img) {
int n = img.size();
int m = img[0].size();
vector<vector<int>> res(n, vector<int> (m));
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
int num = 0;
int sum = 0;
for(int p = i - 1; p <= i + 1; p++){
for(int q = j - 1; q <= j + 1; q++){
if(p >= 0 && p < n && q >= 0 && q < m){
num++;
sum += img[p][q];
}
}
}
res[i][j] = sum / num;
}
}
return res;
}
};