返回
轻松掌握LeetCode 832:翻转图像,展现你对矩阵操作的理解
前端
2023-11-02 19:41:47
LeetCode 832: 翻转图像
问题
给你一个 n x n 的二进制矩阵 image ,其中每个元素可以是 0 或 1。请你翻转这个矩阵,使之成为一个水平翻转和垂直翻转后的图像。
示例 1:
输入:image = [[1,1,0],[1,0,1],[0,0,0]]
输出:[[0,0,0],[0,1,1],[1,1,0]]
解释:图像经过翻转后,得到新图像如下:
[[0,0,0],
[0,1,1],
[1,1,0]]
示例 2:
输入:image = [[1,1],[0,1]]
输出:[[1,1],[1,0]]
解释:图像经过翻转后,得到新图像如下:
[[1,1],
[1,0]]
解题思路
翻转图像有两种方法,一种是利用Python内置的[::-1]
逆向遍历特性,另一种是使用双指针操作。
方法一:利用Python内置函数
Python内置的[::-1]
可以轻松实现列表或字符串的反转。对于一个二维矩阵,我们可以首先使用zip(*image)
将其转置,然后再使用[::-1]
反转每一行,最后再使用zip()
将其还原为二维矩阵。
def flipAndInvertImage(image):
"""
:type image: List[List[int]]
:rtype: List[List[int]]
"""
# 先转置矩阵
image = zip(*image)
# 再反转每一行
for i in range(len(image)):
image[i] = image[i][::-1]
# 最后还原为二维矩阵
return list(zip(*image))
方法二:双指针操作
双指针操作也是一种经典的矩阵翻转算法。我们可以使用两个指针,一个指向矩阵的开头,另一个指向矩阵的结尾。然后,我们可以交换这两个指针所指向的元素,并同时将它们向内移动。重复这个过程,直到两个指针相遇或越过。
def flipAndInvertImage(image):
"""
:type image: List[List[int]]
:rtype: List[List[int]]
"""
# 获得矩阵的行数和列数
m = len(image)
n = len(image[0])
# 使用双指针操作
for i in range(m):
for j in range(n // 2):
# 交换两个元素
image[i][j], image[i][n - j - 1] = image[i][n - j - 1], image[i][j]
# 返回翻转后的矩阵
return image
总结
在LeetCode 832题中,我们学习了两种翻转图像的方法。第一种方法利用Python内置的[::-1]
逆向遍历特性,简单易懂。第二种方法使用双指针操作,更加通用,可以适用于各种编程语言。希望这些方法能够帮助你轻松解决LeetCode 832题,并在算法和编程的道路上不断进步。