LeetCode 832.翻转图像 Python 单行解法代码逐段逻辑讲解请求
LeetCode题目:832. Flipping an Image(翻转图像)
题目描述
给定一个n×n二进制矩阵image,先将图像水平翻转,再进行反转,返回最终得到的图像。
水平翻转指的是反转图像的每一行,例如将[1,1,0]水平翻转得到[0,1,1]。
反转指的是将每个0替换为1、每个1替换为0,例如将[0,1,1]反转得到[1,0,0]。
示例1:
输入:image = [[1,1,0],[1,0,1],[0,0,0]]
输出:[[1,0,0],[0,1,0],[1,1,1]]
解释:首先反转每一行得到[[0,1,1],[1,0,1],[0,0,0]],随后反转图像得到最终结果。
现有Python单行解法
from typing import List class Solution: def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]: return [[1 ^ i for i in reversed(row)] for row in image]
代码逻辑拆解
这段代码是Python的嵌套列表推导式,执行顺序从右到左、从外层到内层,各部分逻辑拆分如下:
- 最外层
for row in image:遍历输入矩阵的每一行,每一轮循环生成结果矩阵的一行 - 内层
for i in reversed(row):reversed(row)会将当前行倒序,对应题目要求的水平翻转操作,之后遍历翻转后的每一个元素i - 循环前的
1 ^ i:这是每个元素的最终取值计算逻辑,^为按位异或运算符,1和0异或结果为1,1和1异或结果为0,刚好实现题目要求的0变1、1变0的反转操作
如果把列表推导式展开为普通for循环,等价代码如下:
from typing import List class Solution: def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]: result = [] # 对应最外层 for row in image for row in image: new_row = [] # 对应内层 for i in reversed(row) for i in reversed(row): # 对应 1 ^ i 元素计算逻辑 new_row.append(1 ^ i) result.append(new_row) return result
内容的提问来源于stack exchange,提问作者KacperG
相关产品推荐
相关产品推荐

