暴力:数组之图片平滑器
问题:
思路:
蛮力法:
需遍历二维数组中的所有元素,先确定边界。
当 当前遍历元素所在行的上一行和下一行存在时,需遍历3行元素;
当 当前遍历元素所在列的左列和右列存在时,需遍历3列元素;
设当前遍历元素所在位置为i行j列,整个矩阵为m行n列
当上一行不存在时,i-1<0,此时当前行为第0行,行遍历的范围从0行开始
当下一行不存在时,i+1>=m,i>=m-1,此时当前行为m-1行,行遍历的结束为m-1行
当左列不存在时,列遍历范围从0列开始
当右列不存在时,列遍历结束为n-1列
因此遍历范围为:
行: max(0,i-1)~min( i+1,m-1 )
列: max(0,j-1)~min( j+1,n-1 )
max(a,b),min(a,b)为STL函数库中头文件包含的函数
代码:
class Solution {
public:
vector<vector<int>> imageSmoother(vector<vector<int>>& M) {
int m=M.size();
int n=M.front().size();
vector<vector<int>> ans( m,vector<int>(n) );
int i;
int j;
int p;
int q;
int count;
int num;
for( i=0;i<m;i++ )
for( j=0;j<n;j++ )
{
count=0;
num=0;
for( p=max(0,i-1);p<=min( i+1,m-1 );p++ )
for( q=max(0,j-1);q<=min( j+1,n-1 );q++ )
{
count+=M[p][q];
num++;
}
ans[i][j]=count/num;
}
return ans;
}
};