48. 旋转图像
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
说明:
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
//做完感想:直接差点给我整吐了,真的太恶心了,也不是,是我太菜了,自己给自己整吐了,哎 ,难顶,行了不说废话了,
//解题思路:一开始我的思路是一行一行的旋转,后来我发现如果你将一整行给旋转过去就会在旋转下一次的时候将值给弄坏了。
比如说有一行123,它的左边是一列 147(这是竖着的)你第一个覆盖的就是1变成7,也就是当行走到3的时候,你期望是1,但是1已经被覆盖了变成了7,所以方法错误。
后来我又想能不能只是覆盖少一个呢?我觉得应该是可以的,但是我没有继续往下想了,
后来我又想能不能对于所有的不考虑顶点呢?感觉太过麻烦,也没有继续往下写了,不知道可不可以。
再后来我看答案了。。。。。一开始还看不懂,仔细想想好像是一个个点的移动,对于之前的只是改良了一下。。。
下面是代码,图书馆闭馆了,不写了,直接上代码了。
1 class Solution { 2 public void rotate(int[][] matrix) { 3 int n=matrix.length; 4 for(int i=0;i<n/2;i++) 5 { 6 for(int j=i;j<n-1-i;j++) 7 { 8 int x1=matrix[i][j]; 9 int x2=matrix[j][n-1-i]; 10 int x3=matrix[n-1-i][n-1-j]; 11 int x4=matrix[n-1-j][i]; 12 matrix[i][j]=x4; 13 matrix[j][n-1-i]=x1; 14 matrix[n-1-i][n-1-j]=x2; 15 matrix[n-1-j][i]=x3; 16 } 17 } 18 } 19 20 }