LC-Image Smoother

406 篇文章 0 订阅
69 篇文章 0 订阅
import copy

class Solution(object):
    def imageSmoother(self, M):
        """
        :type M: List[List[int]]
        :rtype: List[List[int]]
        """
        len_x = len(M)
        len_y = len(M[0])
        res = copy.deepcopy(M)
        for x in range(len_x):
            for y in range(len_y):
                    neighbors = []
                    for x1 in (x-1,x,x+1):
                        for y1 in (y-1,y,y+1):
                            if 0 <= x1 < len_x and 0 <= y1 < len_y:
                                neighbors.append(M[x1][y1])
                    res[x][y] = sum(neighbors) // len(neighbors)
        return res

0,稍作参考的代码
1,题目要求:
这里写图片描述
也就是说对于每一个点,用其9*9范围内的所有点的值得和除以一共的点的个数,下取整即可。
2,题目要求其实不多,唯一需要注意的地方便是如何遍历每个点周围所有的点。
遍历过程其实也不难,用for循环遍历并对遍历得到的点进行边界判断即可。但是,一开始定义的res,不管是用res = [[0] * y_len]*x_len来定义,还是用res = M来直接获得,最后的结果都会有问题。
而参考的代码中利用到了一种deepcopy的办法。


对于简单的 object,用 shallow copy 和 deep copy 没区别
复杂的 object, 如 list 中套着 list 的情况,shallow copy 中的 子list,并未从原 object 真的「独立」出来。也就是说,如果你改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变。这跟我们直觉上对「复制」的理解不同。


因此,res = M 是 shallow copy
‘‘res[x][y] = sum(neighbors) // len(neighbors) will change neighbors of next M[_x][_y] in M.”

copy与deepcopy博客详解

其次,for函数不仅可以定义一个range范围,同时也可以直接定义一个离散的取值范围供变量获得。

最后,/和//都是除法运算,其中//为取整除,即返回商的整数部分。而/在python3 中已经变为浮点数相除了,因此在计算取整相关的除法运算中时,还是要使用//。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值