翻转图像

标签: 位运算 数组 双指针 矩阵 模拟

难度: Easy

给定一个 n x 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]];
     然后反转图片: [[1,0,0],[0,1,0],[1,1,1]]

示例 2:

输入:image = [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
输出:[[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
解释:首先翻转每一行: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]];
     然后反转图片: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]

提示:

  • n == image.length
  • n == image[i].length
  • 1 <= n <= 20
  • images[i][j] == 0 或 1.

Submission

运行时间: 19 ms

内存: 16.1 MB

class Solution:
    def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]:
        for i in range(len(image)):
            image[i]=image[i][::-1]
            for j in range(len(image[i])):
                if image[i][j]==0:
                    image[i][j]=1
                else:
                    image[i][j]=0
        return image

Explain

这道题目需要对每一行的二进制矩阵进行两个操作:首先进行水平翻转,即将每一行的元素顺序颠倒;然后进行反转操作,即将每个元素的0变成1,1变成0。题解中,首先通过切片的方式实现了每一行的水平翻转(image[i] = image[i][::-1]),然后通过一个内层循环遍历每行的每个元素,根据当前元素的值将其反转。

时间复杂度: O(n^2)

空间复杂度: O(1)

class Solution:
    def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]:
        for i in range(len(image)):
            image[i] = image[i][::-1]  # 水平翻转当前行
            for j in range(len(image[i])):
                # 反转当前行的每个元素:0变1,1变0
                image[i][j] = 1 - image[i][j]
        return image

Explore

原地修改数据结构的优点在于它可以减少额外的空间复杂度,从而降低整体的内存使用。在这个特定的问题中,由于水平翻转和元素反转均不需要额外信息,因此可以直接在输入矩阵上操作,减少了空间开销,并且简化了代码的复杂性。如果创建新矩阵来存放结果,不仅会增加空间复杂度,还可能导致额外的时间开销,因为需要复制数据到新的数据结构中。

不,使用切片的方式(image[i] = image[i][::-1])是Python特有的语法,非常方便用于列表的反转。在其他编程语言中,如Java或C++,通常需要使用循环或调用特定的库函数来实现数组或列表的反转。因此,这种切片方法并不是通用的,它依赖于特定语言的特性和内置函数。

是的,使用`1 - image[i][j]`来反转二进制值的前提是输入的元素只能是0或1。如果输入包含除0和1之外的其他值,这种方法将会导致不正确的结果,并可能引发逻辑错误。因此,在实际应用中,应确保输入数据的正确性或在代码中加入输入验证,以保证反转操作的有效性和程序的健壮性。