LeetCode刷题之832.翻转图像

LeetCode刷题之832.翻转图像

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    给定一个二进制矩阵A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转[1,1,0]的结果是[0,1,1]。反转图片的意思是图片中的0全部被1替换,1全部被0替换。例如,反转[0, 1, 1]的结果是[1, 0, 0]。
  • 示例
示例1:
输入: [[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:
输入: [[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]]
  • 说明
    • 1 <= A.length = A[0].length <= 20
    • 0 <= A[i][j] <= 1
  • 代码1:
class Solution:
    def flipAndInvertImage(self, A: List[List[int]]) -> List[List[int]]:
        for i in range(len(A)):
            A[i] = A[i][::-1]
            for j in range(len(A)):
                A[i][j] = A[i][j] ^1
        return(A)
# 执行用时 :68 ms, 在所有 Python3 提交中击败了72.43%的用户
# 内存消耗 :13.7 MB, 在所有 Python3 提交中击败了5.48%的用户
  • 算法说明:
    在第一层循环中,将A中的每一行翻转,实现水平翻转;然后将A中的元素与1进行异或,完成图像反转。
  • 代码2:
class Solution:
    def flipAndInvertImage(self, A: List[List[int]]) -> List[List[int]]:
        for i in range(len(A)):
            a = A[i][::-1]
            for j in range(len(A)):
                if A[i][j] == a[j]:
                    A[i][j] = 1 - A[i][j]
        return A
# 执行用时 :76 ms, 在所有 Python3 提交中击败了54.49%的用户
# 内存消耗 :13.7 MB, 在所有 Python3 提交中击败了5.48%的用户
  • 算法说明:
    将A的元素倒序赋值给a,然后判断A和A中对应位置的元素,如果相等,则用1 - A[i][j]代替A[i][j]即可。
发布了90 篇原创文章 · 获赞 1 · 访问量 1058

猜你喜欢

转载自blog.csdn.net/qq_34331113/article/details/101515971