Rotate Image

May 9, 2016


Rotate Image

题目描述

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?

解法

代码如下:

public static void rotate(int[][] matrix) {
    int m = matrix.length;
    // 水平180°翻转
    for(int i = 0; i < m; i++)
        for(int j = 0; j < m / 2; j++)
            swap(matrix, i, j, i, m - 1 - j);
    // 对角线45°翻转
    for(int i = 0; i < m; i++)
        for(int j = m - 2 - i; j >= 0; j--)
            swap(matrix, i, j, m - 1 - j, m - 1 - i);
}

private static void swap(int[][] matrix, int i, int j, int x, int y) {
    int t = matrix[i][j];
    matrix[i][j] = matrix[x][y];
    matrix[x][y] = t;
}

思考过程:

首先对矩阵水平180°翻转,然后再对角线45°翻转,就可以得到90°的旋转矩阵。

需要注意的地方就是矩阵中位置的关系,特别是对角线45°翻转,两个位置之间的关系满足:

  • i1 + j2 = m - 1
  • j1 + i2 = m - 1

找到这个对应关系是算法正确性的关键。

时空复杂度: 时间复杂度是O(n^2), 空间复杂度是O(1)


上一篇博客:Group Anagrams
下一篇博客:Nim Game