leetcode.array--48. Rotate Image

来源:互联网 发布:10.1.1越狱抹掉数据 编辑:程序博客网 时间:2024/06/06 21:46

题目:48. Rotate Image

题目描述:https://leetcode.com/problems/rotate-image/description/

意思是说,给定一个NxN的矩阵,将该矩阵顺时针旋转90度。要求不能分配新的二维矩阵,只能在原有的矩阵上进行修改。

我是这么写的:用zip()和map()实现矩阵转置,然后再把矩阵的每一行反转。由于zip()和map()均返回一个生成器,于是并没有再分配另一个矩阵空间。

Python:

class Solution(object):    def rotate(self, matrix):        """        :type matrix: List[List[int]]        :rtype: void Do not return anything, modify matrix in-place instead.        """        def reverse(nums):            length=len(nums)            for i in range(length//2):                nums[i],nums[length-i-1]=nums[length-i-1],nums[i]            return        tempGene=map(list,zip(*matrix))        del matrix[:]        for item in tempGene:            matrix.append(item)        for i in range(len(matrix)):            reverse(matrix[i])        # print(matrix)        return

结束了吗?没有。实际上Python3中的zip()和map()才会返回一个生成器,而Python2中这两个函数的返回值是List(列表),也就是说,上面代码中的tempGene在Python2中是一个列表,不符合题意。于是改成下面这样:

Python:

class Solution(object):    def rotate(self, matrix):        """        :type matrix: List[List[int]]        :rtype: void Do not return anything, modify matrix in-place instead.        """        def reverse(nums):            length=len(nums)            for i in range(length//2):                nums[i],nums[length-i-1]=nums[length-i-1],nums[i]            return        for i in range(len(matrix)):            for j in range(i):                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]        for item in matrix:            reverse(item)        return

结束了吗?还没。上面的矩阵变换等价于:先交换矩阵的行,再进行转置,于是又可以写成这样:

Python:

class Solution(object):    def rotate(self, matrix):        """        :type matrix: List[List[int]]        :rtype: void Do not return anything, modify matrix in-place instead.        """        rows=len(matrix)        for i in range(rows//2):            matrix[i],matrix[rows-i-1]=matrix[rows-i-1],matrix[i]        for i in range(len(matrix)):            for j in range(i):                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]        return


原创粉丝点击