原题
- 题目描述:给你一个二维数组,每个元素的值要你按照以他为中心的8个值外加自己的值求平均值,并填在元素位置上,其中有些位置没有8个邻居,那么就找出尽可能多的邻居算平局值(包括自身),按照这个方法最终返回新矩阵
- 思路:
- 先写一个判断数组下标是否越界的函数
- 然后,遍历数组时,每个位置i,j,按照i和j分别上下左右共8个方向偏移,对每次偏移判断是否越界,由此可找出有效邻居的个数,总和,最终得到平均值
- 此代码在处理8个方向及包含自己的9个位置时运用的两个for循环解决,简直不要太完美!一点也没拖泥带水,涨知识了!!
class Solution {
public int[][] imageSmoother(int[][] M) {
int rows=M.length;
int cols=M[0].length;
int[][] res=new int[rows][cols];
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
res[i][j]=getElem(i,j,rows,cols,M);
}
}
return res;
}
public static int getElem(int i,int j,int rows,int cols,int[][] M){
int count=0;
int sum=0;
int[] move={-1,0,1};
for(int rowMove : move){
for(int colMove : move){
if(isVaild(i+rowMove,j+colMove,rows,cols)){
count++;
sum+=M[i+rowMove][j+colMove];
}
}
}
return sum/count;
}
public static boolean isVaild(int i,int j,int row,int col){
return i>=0&&i<row&&j>=0&&j<col;
}
}