题目:
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Note:
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.
Example 1:
Given input matrix = [ [1,2,3], [4,5,6], [7,8,9] ], rotate the input matrix in-place such that it becomes: [ [7,4,1], [8,5,2], [9,6,3] ]
Example 2:
Given input matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], rotate the input matrix in-place such that it becomes: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ]
主要意思就是将数组顺时针旋转90度,要求是不能另开一个数组空间来进行操作。
解法思想:建立一个temp数组,对于同一层的旋转,先用temp保存一条边的值,之后进行旋转,最后将temp返回旋转后的最后一条边。整个过程由最外层向里进行。
代码:
class Solution {
public void rotate(int[][] matrix) {
int d = matrix.length;
int deep = d/2;
int[] temp;
temp=new int[matrix.length];
for(int i =0 ; i<= deep ; i++){
for(int j = i ; j < d-i; j++){
temp[j] = matrix[i][j];
}
for(int j = i ; j< d-i ; j++){
matrix[i][d-j-1]= matrix[j][i];
}
for(int j = i ; j< d-i ; j++){
matrix[j][i]= matrix[d-i-1][j];
}
for(int j = i ; j< d-i ; j++){
matrix[d-i-1][j]= matrix[d-j-1][d-i-1];
}
for(int j = i ; j < d-i; j++){
matrix[j][d-i-1] = temp[j];
}
}
}
}