题解 | #顺时针旋转矩阵#
顺时针旋转矩阵
http://www.nowcoder.com/practice/2e95333fbdd4451395066957e24909cc
题目:顺时针旋转90度N阶矩阵
思路:找出坐标变换规律,可分为原地旋转和使用辅助空间旋转
(1 使用辅助空间,新旧坐标映射规律为[i][j]---》[j][n-i-1]
//空间复杂度 O(n^2),时间复杂度 O(n^2)
public int[][] rotateMatrix(int[][] mat, int n) {
// write code here
int [][]result=new int[n][n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
result[j][n-i-1]=mat[i][j];
}
return result;
}
(1 原地旋转
每一次旋转涉及四个数,先找出每次旋转涉及的四个数
将四个数视作一个环,它们的前后相继关系是不变的,如(1,2,3,4)旋转后变成(4,1,2,3),因此只需要一个辅助变量,就可完成一次旋转
//空间复杂度 O(1),时间复杂度 O(n^2),原地旋转一层一层转
public int[][] rotateMatrix(int[][] mat, int n) {
for(int i=0;i<n/2;i++)
for(int j=i;j<n-i-1;j++){
/*int []p=new int[4];
p[0]=mat[i][j];
p[1]=mat[j][n-i-1];
p[2]=mat[n-i-1][n-j-1];
p[3]=mat[n-j-1][i];
*/
int temp=mat[i][j];
mat[i][j]=mat[n-j-1][i];
mat[n-j-1][i]=mat[n-i-1][n-j-1];
mat[n-i-1][n-j-1]=mat[j][n-i-1];
mat[j][n-i-1]=temp;
}
return mat;
}