LeetCode 旋转矩阵

172 阅读1分钟

旋转矩阵

一:第i行变成倒数第i列,第j列变成第j行

  • 使用辅助数组
class Solution {
    public void rotate(int[][] matrix) {
        if(matrix.length == 0 || matrix[0].length == 0){
            return;
        }
        int[][] matrixCopy = new int[matrix.length][matrix.length];
        int temp = 0;
        for(int a=0;a<matrix.length;a++){
            for(int b=0;b<matrix[0].length;b++){
                      matrixCopy[a][b] = matrix[a][b];
            }
        }
        
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[0].length;j++){  
                // temp = matrix[j][matrix.length-i-1];
                 matrix[j][matrix.length-i-1] = matrixCopy[i][j];       
            }
        }
        return ;
    }
}
  • 原地旋转 用temp保存要被覆盖的元素,递推

n/2 (n+1)/2 旋转一次,四个元素变换位置,位置变换元素数:奇数矩阵 n^2-1 ,偶数矩阵 n^2 ;要覆盖最多数量,并且不能多出一个单位 ; n*(n-1) nn n(n+1) 从0开始,所以是<

class Solution{
    public void rotate(int[][] matrix){
        int n = matrix.length;
        if(n==0||matrix[0].length == 0){
            return;
        }
        //
        for(int i=0;i< n/2;i++){
            for(int j=0;j<(n+1)/2;j++){
                int temp =  matrix[i][j];
                matrix[i][j] = matrix[n-j-1][i];
                 matrix[n-j-1][i] = matrix[n-i-1][n-j-1];
                  matrix[n-i-1][n-j-1] = matrix[j][n-i-1];
                   matrix[j][n-i-1] = temp;
            }
        }
        return;
    }
}

二: 对矩阵翻转,先上下翻转,再按对角线翻转