解法1:一层一层循环,坐标变换
import java.util.*;
public class Solution {
public int[][] rotateMatrix(int[][] mat, int n) {
// write code here
int tR=0;
int tC=0;
int dR=n-1;
int dC=n-1;
while(tR<dR){
for(int i=0;i<dC-tC;i++){
int tmp=mat[tR][tC+i];
mat[tR][tC+i]=mat[dR-i][tC];
mat[dR-i][tC]=mat[dR][dC-i];
mat[dR][dC-i]=mat[tR+i][dC];
mat[tR+i][dC]=tmp;
}
tR++;
tC++;
dR--;
dC--;
}
return mat;
}
}解法2:做两次翻转,先沿右上-左下的对角线翻转,再沿水平中线上下翻转
即:对于函数中的一个点,先以y=x为轴作对称,然后以x轴作对称,则相当于该点顺时针旋转90°。所以对于图像来说每个点顺时针旋转了,则图也旋转了。所以可以将图以对角线作对称,然后以中间的横线作对称。
import java.util.*;
public class Rotate {
public int[][] rotateMatrix(int[][] mat, int n) {
// write code here
// 对角线
for(int i=0; i<n;i++) {
for(int j=i+1; j< n; j++) {
int temp = mat[i][j];
mat[i][j] = mat[j][i];
mat[j][i] = temp;
}
}
// 以竖轴翻转
for(int i=0;i<n;i++) {
for(int j=0; j< n/2; j++) {
int temp = mat[i][j];
mat[i][j] = mat[i][n-1-j];
mat[i][n-1-j] = temp;
}
}
return mat;
}
}解法3:找规律:mat[i][j]被旋转到了mat[j][n-i-1]的位置
import java.util.*;
public class Rotate {
public int[][] rotateMatrix(int[][] mat, int n) {
// write code here
int[][] temp=new int[n][n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
temp[j][n-1-i]=mat[i][j];
}
}
return temp;
}
}
京公网安备 11010502036488号