Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother to make the gray scale of each cell becomes the average gray scale (rounding down) of all the 8 surrounding cells and itself. If a cell has less than 8 surrounding cells, then use as many as you can.
Example 1:
Input: [[1,1,1], [1,0,1], [1,1,1]] Output: [[0, 0, 0], [0, 0, 0], [0, 0, 0]] Explanation: For the point (0,0), (0,2), (2,0), (2,2): floor(3/4) = floor(0.75) = 0 For the point (0,1), (1,0), (1,2), (2,1): floor(5/6) = floor(0.83333333) = 0 For the point (1,1): floor(8/9) = floor(0.88888889) = 0
Note:
- The value in the given matrix is in the range of [0, 255].
- The length and width of the given matrix are in the range of [1, 150].
题意:
给一个二维数组,求它以及八个方位这九个数的平均值,如果有的方位没有的话就算那些有的。
思路:
注意判断边界以及初始化的问题。
代码:
class Solution {
public int[][] imageSmoother(int[][] M) {
int r=M.length;
int c=M[0].length;
int [][]arr=new int[r][c];
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
int []a=new int [8];
int ans=1;
a[0]=(i-1>=0&&j-1>=0)?M[i-1][j-1]:0;
ans=(i-1>=0&&j-1>=0)?ans+1:ans;
a[1]=(i-1>=0)?M[i-1][j]:0;
ans=(i-1>=0)?ans+1:ans;
a[2]=(j-1>=0)?M[i][j-1]:0;
ans=(j-1>=0)?ans+1:ans;
a[3]=(i+1<r&&j-1>=0)?M[i+1][j-1]:0;
ans=(i+1<r&&j-1>=0)?ans+1:ans;
a[4]=(i+1<r)?M[i+1][j]:0;
ans=(i+1<r)?ans+1:ans;
a[5]=(i+1<r&&j+1<c)?M[i+1][j+1]:0;
ans=(i+1<r&&j+1<c)?ans+1:ans;
a[6]=(j+1<c)?M[i][j+1]:0;
ans=(j+1<c)?ans+1:ans;
a[7]=(i-1>=0&&j+1<c)?M[i-1][j+1]:0;
ans=(i-1>=0&&j+1<c)?ans+1:ans;
int sum=M[i][j]+a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7];
arr[i][j]=(int)Math.floor(sum/ans);
}
}
return arr;
}
}