原題
- 題目描述:給你一個二維數組,每個元素的值要你按照以他爲中心的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;
}
}