给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
说明:
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
示例 1:
给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ]
解题思路:
刚开始没有想到,后来看过提示才恍然大悟,感觉这一类题目还是要注意观察图像的特征,把操作进行逐步分解,这样就把原地旋转分解为上下行互换、和对角线互换两个步骤,接下来就很容易了。
public static void rotate(int[][] matrix) {
// System.out.println(matrix.length);
int a = 0;
//第一步,上下互换
for(int i=0;i<matrix.length/2;i++){
for(int j=0;j<matrix.length;j++){
//第一行和最后一行互换,第二行和倒数第二行互换,以此类推
a = matrix[i][j];
matrix[i][j] = matrix[matrix.length-(i+1)][j];
matrix[matrix.length-(i+1)][j] = a;
}
}
//第二步,对角线互换
for(int i=0;i<matrix.length;i++){
for(int j=i;j<matrix.length;j++){//每次进行到下一行的时候,要把已经换过的部分忽略掉!
if(i!=j){
//对角线上的元素互换,a12=a21,a13=a31,以此类推
a = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = a;
}
}
}
//查看结果
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix.length;j++){
System.out.printf(matrix[i][j]+",");
}
System.out.println("\n");
}
}