[leetcode] Rotate Image

来源:互联网 发布:app源码怎么用 编辑:程序博客网 时间:2024/05/08 19:15

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?

思路:因为要in-place的进行转置,所以不能用另外一个二维数组来存。总体思路是,比如下面这个矩阵

1  2   3   4

5  6   7   8

9  10 11 12

13 14 15 16

置换过程中,一圈一圈得进行。先进行外圈的置换,1换到4,4换到16,16换到13, 13换到11,然后再进行2换到8,8换到15,15换到9,9换到2,这样以此类推,外圈换完了换内圈。这样只需要两个temp的额外空间。困难的点在于推导每个点的坐标。代码如下:

class Solution:    # @param matrix, a list of lists of integers    # @return a list of lists of integers    def rotate(self, matrix):        n = len(matrix)        if n == 1:            return matrix        start = 0        end = n-1        level = 0        while level <= n/2-1:            for i in range(start, end):                tmp = matrix[level+i-start][end]                matrix[level+i-start][end] = matrix[level][i]                tmp1 = matrix[n-level-1][end-i+start]                matrix[n-level-1][end-i+start] = tmp                matrix[level][i] = matrix[n-level-1-i+start][start]                matrix[n-level-1-i+start][start] = tmp1            start += 1            end -= 1            level += 1        return matrix


0 0
原创粉丝点击