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

LeetCode#48 Rotate Image

时间:2015-08-04 22:25:33      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

Problem Definition:

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?

Solution:

顺时针旋转90度,就是以表格(图片)中心为轴,所有坐标都做旋转。旋转中的坐标映射,用一个小例子来试试:

对一个3X3的表格,单元格的映射是这样的:

00-->02-->22-->20-->00

01-->12-->21-->10-->01

02-->22-->20-->00-->02

(最后一行这个变换跟第一行操作的是同一组元素,不会真的进行,只是为了表达单元格坐标见的关系。)

上图中第一二列,相邻近的子列是相同的,相远离的子列,相加得n-1.

再来看个大一点的例子:

技术分享

00会跑到03的位置,03会跑到33的位置....下图标出了这样的一组单元格(蓝色填充):

技术分享

01会跑到13的位置,13会跑到32的位置...这一组用红色表示:

技术分享

02啥的同理,绿色表示:

技术分享

如此一圈下来,外围的单元格都转完了,剩下里边一个2 x 2的表格。继续转....

技术分享

 

循环地赋值,空间复杂度O(1)

 1     # @param {integer[][]} matrix
 2     # @return {void} Do not return anything, modify matrix in-place instead.
 3     def rotate(matrix):
 4         m=len(matrix)
 5         if m<=1:
 6             return
 7         for i in range(m-1):
 8             for j in range(i,m-1-i):
 9                 z=matrix[i][j]
10                 matrix[i][j]=matrix[m-1-j][i]
11                 matrix[m-1-j][i]=matrix[m-1-i][m-1-j]
12                 matrix[m-1-i][m-1-j]=matrix[j][m-1-i]
13                 matrix[j][m-1-i]=z

 

LeetCode#48 Rotate Image

标签:

原文地址:http://www.cnblogs.com/acetseng/p/4703086.html

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