leetcode 面试题01.07.旋转矩阵

原题如下

面试题01.07.旋转矩阵
同48.旋转图像
leetcode 面试题01.07.旋转矩阵_第1张图片

题解

方法一 转置翻转,常数额外空间

本题是要顺时针旋转,先转置,后左右对称;
若要逆时针旋转,先转置,再上下对称。
本思路java代码示例:

/*
 *@v7fgg
 *执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户
 *内存消耗 :39.8 MB, 在所有 Java 提交中击败了100.00%的用户
 *2020年6月11日 21:57
 */
class Solution {
    public void rotate(int[][] matrix) {
        //先转置,再左右
        int N=matrix.length;
        //转置
        for(int i=0;i<N;i++){
            for(int j=i+1;j<N;j++){
                int linshi=matrix[i][j];
                matrix[i][j]=matrix[j][i];
                matrix[j][i]=linshi;
            }
        }
        //左右
        for(int i=0;i<N;i++){
            for(int j=0;j<N/2;j++){
                int linshi=matrix[i][j];
                matrix[i][j]=matrix[i][N-1-j];
                matrix[i][N-1-j]=linshi;
            }
        }
    }
}

方法二 四象限法

这也是常规模拟的办法。把矩阵分为四块,左上角那个块儿里面的每一个元素,都对应着另外三个块儿里面的三个元素,这四个元素互相旋转。
需要注意:当行数为偶数的时候,可以规规矩矩分成四个小正方形;而当行数为奇数,那么就是四个长方形,长宽差1,并且在长度一半上下,四个长方形的元素按照上边的方法旋转,最中间的元素不必动位置。
本思路java代码示例:

/*
@v7fgg
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:40.1 MB, 在所有 Java 提交中击败了7.69%的用户
2020年7月7日 15:04
*/
class Solution {
    public void rotate(int[][] matrix) {
        if(matrix.length%2==0){
            for(int i=0;i<matrix.length/2;i++){
                for(int j=0;j<matrix.length/2;j++){
                    int linshi=matrix[i][j];
                    matrix[i][j]=matrix[matrix.length-1-j][i];
                    matrix[matrix.length-1-j][i]=matrix[matrix.length-1-i][matrix.length-1-j];
                    matrix[matrix.length-1-i][matrix.length-1-j]=matrix[j][matrix.length-1-i];
                    matrix[j][matrix.length-1-i]=linshi;
                }
            }
        }
        else{
            for(int i=0;i<matrix.length/2;i++){
                for(int j=0;j<=matrix.length/2;j++){
                    int linshi=matrix[i][j];
                    matrix[i][j]=matrix[matrix.length-1-j][i];
                    matrix[matrix.length-1-j][i]=matrix[matrix.length-1-i][matrix.length-1-j];
                    matrix[matrix.length-1-i][matrix.length-1-j]=matrix[j][matrix.length-1-i];
                    matrix[j][matrix.length-1-i]=linshi;
                }
            }
        }
    }
}

你可能感兴趣的:(可爱宝宝做leetcode)