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

顺时针旋转矩阵

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

相关推荐

今天 12:15
门头沟学院 Java
点赞 评论 收藏
分享
哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务