一、模拟旋转

空间复杂度 O(n^2)O(n),时间复杂度 O(n^2)O(n)

算法:使用ans记录结果,遍历mat这一行结果,是ans对应列的结果。行列之间的映射关系是:i->n-i-1

alt

import java.util.*;
public class Solution{
    public int[][] rotateMatrix(int[][] mat, int n) {
        int[][] ans = new int[n][n];
        int i,j;
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                ans[j][n-i-1]=mat[i][j];
            }
        }
        return ans;
    }
}

二、先中心对称,后左右对称

时间(n*n) 空间(1)

算法如下:先中心对称,后左右对称就是结果

alt

import java.util.*;

public class Solution {
    public int[][] rotateMatrix(int[][] mat, int n) {
       int i,j;
        
        //1.中心对称
        for(i=0;i<n;i++){
            for(j=0;j<=i;j++){
                int t = mat[i][j];
                mat[i][j]=mat[j][i];
                mat[j][i]=t;
            }
        }
        //2.左右对称
        for(i=0;i<n;i++){
            for(j=0;j<n/2;j++){
                int t = mat[i][j];
                mat[i][j]=mat[i][n-j-1];
                mat[i][n-j-1]=t;
            }
        }
        return mat;
    }
}