LeetCode 每日一题 661.图片平滑器

简单枚举

对于任意的一个点x,即坐标为img[ i ][ j ],我们都可以通过改变横坐标i,和纵坐标j的值来得到其它方向的值,即

let step = [[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]];

此时 我们只需要将i和j和循环时每个方向上的坐标相加,就能得到该方向坐标的值,然后对于每一个img[i][j]维护一个数的总和和数量,将结果计算后添加进新数组就可以了。(注意边界情况。越过边界的值无效)

代码参考(JavaScript)

var imageSmoother = function(img) {
    let oldImge = [];//结果二维数组
    let m = img.length,n = img[0].length;//img长度
    let step = [[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]];//八个方向上的值
    for(let i = 0;i<m;i++){//循环img长度
        if(!oldImge[i]) oldImge[i] = [];//创建新数组
        for(let j = 0;j<n;j++){//循环img[0]长度 也就是循环每个点
            let num = img[i][j];//因为是9个值累加 所以需要首先加上自身的值
            let sum = 1;//自身的步数
            for(let k = 0;k<step.length;k++){//循环八个方向的值 step
                let newx = i+step[k][0];//得到当前方向的横坐标的值
                let newy = j+step[k][1];//得到当前方向的纵坐标的值
                if(newx >= 0 && newx < m && newy >=0 && newy < n){//判断是否越过了边界 越过了就不能计算在其中
                    num += img[newx][newy];//当前方向上的值有效 累加数值
                    sum++;//累加步数
                }
            }
            oldImge[i][j] = Math.floor(num/sum);//将当前点八个方向上和自身的平均值计算后放入结果数组
        }
    }
    return oldImge;//返回结果数组
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值