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; } } }