给定一个 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"); } }
转载请标明出处:旋转图像
文章来源: 旋转图像