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?

题目意思很简单,就是给一个n*n的数组,然后将这个数组顺时针旋转90度,然后就是要求在有限的空间下进行。

观察之后其实很简单,但是难在变量的控制上。修改了好几次才修改成功。

 

如图所示,所替换的数字顺序就是:最外面一圈的顺序是:

                  1 --> 5 --> 25 --> 21 --> 1

                2 --> 10 --> 24 --> 16 --> 2

                3 --> 15 --> 23 --> 11 --> 3

                4 --> 20 --> 22 --> 6 --> 4

第二圈的顺序是:

                7 --> 9 -->19 --> 17 -->7

                8 --> 14 --> 18 --> 12 --> 8

第三圈的顺序就是:

                13本身不用变

所以原理就是从外向里,一圈一圈的转90度。

在这里就是第一圈代码好写,往里面写的时候,出错了好多次。但是理清思路,还是可以写好的。        

结果是0ms。

public class Solution {
    public void rotate(int[][] matrix) {
        int len = matrix[0].length;
        if( len < 2)
        	return ;
        int time = len/2,pos = len;
        for( int i = 0;i<time ;i++){
            pos--;
            //System.out.println(pos);
        	for( int j = i,k = 0;k<len-1;k++,j++){
        	    int num = matrix[i][j];
        		matrix[i][j] = matrix[pos-j+i][i];
        		matrix[pos-j+i][i] = matrix[pos][pos-j+i];
        		matrix[pos][pos-j+i] = matrix[j][pos];
        		matrix[j][pos] = num;
        	}
           	len-=2;

        	
        }
    }
}