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?
90度旋转图片~基本思路是把图片分为n/2层,然后一层层进行旋转,每一层有上下左右四个列,然后就是把上列放到左列,左列放到下列,下列放到右列,右列放回上列,中间保存一个临时变量就可以~因为每个元素搬运的次数不会超过一次,时间复杂度是O(矩阵的大小)~对应关系要注意,很容易出错~
class Solution:
# @param matrix, a list of lists of integers
# @return a list of lists of integers
def rotate(self, matrix):
if matrix is None or len(matrix) == 0 or len(matrix[0]) == 0: return
n = len(matrix)
for i in xrange(n /2):
for j in xrange(i, n - 1 - i):
tmp = matrix[i][j]
matrix[i][j] = matrix[n - 1 - j][i]
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j]
matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i]
matrix[j][n - 1 - i] = tmp
return matrix
还看到一个只有一行代码的python解法,代码如下~
class Solution:
# @param matrix, a list of lists of integers
# @return a list of lists of integers
def rotate(self, matrix):
return [list(reversed(x)) for x in zip(*matrix)]
zip() in conjunction with the * operator can be used to unzip a list: