题目:
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?
思路:
首先,要求原地调整,那么需要寻找变换规律。举个例子:
对于3x3的矩阵,如顺时针调整(0,0)->(0,2)->(2,2)->(2,0)
对于4x4的矩阵,如顺时针调整(0,0)->(0,3)->(3,3)->(3,0);(0,1)->(1,3)->(3,2)->(2,0);(0,2)->(2,3)->(3,1)->(1,0).
转换传递规律:对于一个nxn矩阵来说,(a,b)->(b,n-1 - a),并且该链式传递转换有四部。
当矩阵最外一层转换完之后,向内进发一层,继续转换。
如下代码中:for循环结束时,是该层一圈的所有点转换完成。然后修改n和start,使得开始点向内一圈再次进行传递转换。
AC代码:
public void rotate(int[][] matrix) { if(matrix==null || matrix.length==0) return; int n = matrix.length; int start = 0; while(n>1){ for(int i=start;i<matrix.length-1-start;i++){ int tmp = matrix[start][i]; matrix[start][i] = matrix[matrix.length-1 - i][start]; matrix[matrix.length-1-i][start] = matrix[matrix.length-1 - start][matrix.length-1-i]; matrix[matrix.length-1 - start][matrix.length-1-i] = matrix[i][matrix.length-1-start]; matrix[i][matrix.length-1-start]= tmp; } n-=2; start++; } }