题解 | #顺时针旋转矩阵#

顺时针旋转矩阵

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;
    }
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务