LeetCode Rotate Image

来源:互联网 发布:咏春期权交易软件 编辑:程序博客网 时间:2024/05/17 08:58

LeetCode解题之Rotate Image


原题

将一个矩阵顺时针旋转90度。

注意点:

  • 最好不要申请额外空间

例子:

输入: matrix = [[1, 2, 3],
[8, 9, 4],
[7, 6, 5]]

输出: [[7, 8, 1],
[6, 9, 2],
[5, 4, 3]]

解题思路

如果可以申请额外空间,哪怕一个临时的变量,那只要找一下规律还是很容易实现的。但题目要求最好不要申请额外空间,这就需要技巧了,看到一个很巧妙的方法:先将矩阵沿着对角线翻转,再上下翻转,就可以实现顺时针旋转90度的效果。具体看如下的例子:

1 2 3        5 4 3       7 8 18 9 4    ->  6 9 2   ->  6 9 27 6 5        7 8 1       5 4 3

两次翻转对应的坐标需要细心,不然很容易搞错。

AC源码

class Solution(object):    def rotate(self, matrix):        """        :type matrix: List[List[int]]        :rtype: void Do not return anything, modify matrix in-place instead.        """        n = len(matrix)        for row in range(n):            for column in range(n - row):                matrix[row][column], matrix[n - 1 - column][n - 1 - row] = matrix[n - 1 - column][n - 1 - row], \                                                                           matrix[row][column]        for row in range(n // 2):            for column in range(n):                matrix[row][column], matrix[n - 1 - row][column] = matrix[n - 1 - row][column], matrix[row][column]        # No need, just to test        return matrixif __name__ == "__main__":    assert Solution().rotate([[1, 2, 3], [8, 9, 4], [7, 6, 5]]) == [[7, 8, 1], [6, 9, 2], [5, 4, 3]]

欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。

0 0