leetcode.array--48. Rotate Image

题目: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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值