解题思路
这道题和螺旋矩阵那道题基本上是一个模子,主要是判定边界真的很恶心。
这里定义四个变量:loop用来控制遍历圈数,startx和starty用来控制开始的数组位置,offset用来控制一条边结束的位置,区间判定是左闭右开。循环内部用i和j来控制下标。
第一次循环先记录当前边的元素,第2,3,4,5次循环分别用来给元素赋值和交换。
代码
class Solution {
public void rotate(int[][] matrix) {
int n=matrix.length;
int loop=n/2;
int[] temp=new int[n-1];
int startx=0,starty=0;
int offset=0;
int i,j;
while (loop!=0){
i=startx;
j=starty;
int k=0;
for (;j<n-offset-1;j++){
temp[k++]=matrix[i][j];
}
k=0;
for (;i<n-offset-1;i++){
int t=matrix[i][j];
matrix[i][j]=temp[k];
temp[k++]=t;
}
k=0;
for (;j>starty;j--){
int t=matrix[i][j];
matrix[i][j]=temp[k];
temp[k++]=t;
}
k=0;
for (;i>startx;i--){
int t=matrix[i][j];
matrix[i][j]=temp[k];
temp[k++]=t;
}
k=0;
for (;j<n-offset-1;j++){
int t=matrix[i][j];
matrix[i][j]=temp[k];
temp[k++]=t;
}
offset++;
startx++;
starty++;
loop--;
}
}
}