661. Image Smoother

原题

  • 题目描述:给你一个二维数组,每个元素的值要你按照以他为中心的8个值外加自己的值求平均值,并填在元素位置上,其中有些位置没有8个邻居,那么就找出尽可能多的邻居算平局值(包括自身),按照这个方法最终返回新矩阵
  • 思路:
    1. 先写一个判断数组下标是否越界的函数
    2. 然后,遍历数组时,每个位置i,j,按照i和j分别上下左右共8个方向偏移,对每次偏移判断是否越界,由此可找出有效邻居的个数,总和,最终得到平均值
    3. 此代码在处理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循环可以说让程序变得异常干净)
        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;//M[i][j]位置上的灰度
    }

    public static boolean isVaild(int i,int j,int row,int col){//判断(i,j)位置是否越界
            return i>=0&&i<row&&j>=0&&j<col;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值