48. 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?

The idea was firstly transpose the matrix and then flip it symmetrically. For instance,

1  2  3             
4  5  6
7  8  9

after transpose, it will be swap(matrix[i][j], matrix[j][i])

1  4  7
2  5  8
3  6  9

Then flip the matrix horizontally. (swap(matrix[i][j], matrix[i][matrix.length-1-j])

7  4  1
8  5  2
9  6  3
    /** No extra space  2 steps*/
    public void rotate(int[][] matrix) {
        int row = matrix.length;
        int col = matrix[0].length;
        for(int i = 0 ; i < row; i++){
            for(int j = i; j < col ; j++){  //对角线
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp; 
            }
        } // step 1

        for(int i = 0 ; i < row; i++){
            for(int j = 0; j < row/2 ; j++){  //col -> row
                int temp = matrix[i][j];
                matrix[i][j] = matrix[i][row-1-j];
                matrix[i][row-1-j] = temp; 
            }
        } // step 2       
        
    }

 

posted @ 2016-11-27 11:11  微微程序媛  阅读(100)  评论(0编辑  收藏  举报