[leetcode 48] rotate image

1 题目

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?

2 思路

使用辅助空间比较简单。

不使用辅助空间,想了半天,没想出来。。

看别人的代码,原来是要翻转两次。。

3 代码

    public void rotate(int[][] matrix) {
        // 使用多余空间的
        int length = matrix.length;
        Integer[][] m = new Integer[length][length];
        for(int i=0;i<length;i++){
            for(int j = 0;j<length;j++){
                m[j][length-i-1] = matrix[i][j];
            }
        }
        for(int i=0;i<length;i++){
            for(int j = 0;j<length;j++){
                matrix[i][j] = m[i][j];
            }
        }
    }
    
    // 不使用多余空间
    
    // 法1: exchange up and down matrix[i][j] = matrix[length-1-i][j],swap symmetry matrix[i][j] = matrix[j][i]
    public void rotate1(int[][] matrix) {
        int length = matrix.length;
        for(int i=0;i<length/2;i++){
            for(int j = 0;j<length;j++){
                int temp = matrix[i][j];
                matrix[i][j] = matrix[length-1-i][j];
                matrix[length-1-i][j] = temp;
            }
        }
        
        for(int i=0;i<length;i++){
            for(int j = 0;j<i;j++){
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
    }
    
    // 法2:  transpose(matrix[i][j]=matrix[j][i], flip horizontally matrix[i][j] = matrix[i][length-1-j]
原文地址:https://www.cnblogs.com/lingtingvfengsheng/p/4841190.html