leetcode 832 翻转图像

leetcode 832 翻转图像

# 解法非常容易说一下这里遇到的问题
# 在第一个for循环中想直接改变值来避免第二次循环, 结果未奏效
class Solution:
    def flipAndInvertImage(self, A):
        if not A:
            return A

        for i in A:
            start, end = 0, len(A[0]) - 1
            while start <= end:
                i[start], i[end] = i[end], i[start]
                start, end = start + 1, end - 1
        for index, val in enumerate(A):
            for i, value in enumerate(val):
                A[index][i] = 0 if A[index][i] else 1
        return A

# python for循环通过迭代器实现,迭代器具有只读属性(循环过程对迭代器加锁)
# 可通过下标访问或者enumerate遍历实现此处通过下标进行解决
class Solution:
    def flipAndInvertImage(self, A):
        if not A:
            return A

        len_A = len(A)
        for i in range(len_A):
            start, end = 0, len_A - 1
            while start < end:
                A[i][start] = 0 if A[i][start] else 1
                A[i][end] = 0 if A[i][end] else 1
                A[i][start], A[i][end] = A[i][end], A[i][start]
                start, end = start + 1, end - 1
            if start == end:
                A[i][start] = 0 if A[i][start] else 1
        return A
# 通过异或运算优化if条件判断
class Solution:
    def flipAndInvertImage(self, A):
        if not A:
            return A

        len_A = len(A)
        for i in range(len_A):
            start, end = 0, len_A - 1
            while start < end:
                A[i][start] ^= 1
                A[i][end] ^= 1
                A[i][start], A[i][end] = A[i][end], A[i][start]
                start, end = start + 1, end - 1
            if start == end:
                A[i][start] ^= 1
        return A
# 此题目也可以通过reverse函数或者切片操作来进行处理, 做法更加pythonic
class Solution:
    def flipAndInvertImage(self, A):
        return [[j ^ 1 for j in i[::-1]] for i in A]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值