码迷,mamicode.com
首页 > 其他好文 > 详细

Rotate Image

时间:2016-05-08 18:01:38      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Follow up:
Could you do this in-place?

题目要求顺时针翻转一个二维矩阵,简单直接的思路是从里向外,以矩阵中心为中心,一瓣一瓣旋转。但是这样需要借助temp作为中间存储,规则也比较麻烦。一个比较tricky的思路是对矩阵进行两次对称翻转。一种翻转方法是,先沿着副对角线翻转一次,之后再上下翻转一次。另外一种是先上下翻转,之后再沿主对角线翻转。(主对角线是指 左下到右上,副对角线是指左上到右下)。方法一示意图如下:

技术分享

方法二示意图如下:

     技术分享

第一种解法代码如下:

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 i in range(n-1):
            for j in range(n-1-i):
                matrix[n-1-j][n-1-i],matrix[i][j] = matrix[i][j],matrix[n-1-j][n-1-i]
        matrix.reverse()
        return 

第二种代码实现如下:

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)
        matrix.reverse() 
        
        for i in range(0,n-1):
            for j in range(i+1,n):
                matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]
        return 

时间复杂度都是O(n^2),空间复杂度O(1)。但是可以发现沿主对角线翻转比沿辅对角线翻转要方便很多,只需要交换index,不需要计算。另外注意的是每次交换其实只要操作一半数组。全部操作反而无效。

 

Rotate Image

标签:

原文地址:http://www.cnblogs.com/sherylwang/p/5470943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!