leetcode48. 旋转图像

方法1:原地旋转

class Solution {
    public void rotate(int[][] matrix) {
        /*
            单独写一下数组中元素的原位置以及旋转之后的位置可以发现这样一个规律:
                (i,j)位置的元素最终的位置是(j,n-i);这里n是matrix.length-1;
            这样进行多次操作如下:
                (i,j)->(j,n-i)->(n-i,n-j)->(n-j,i)->(i,j)
            可以发现,再进行多次将单个数的“旋转”(放到了旋转后的位置)就回到了原来的位置
            可以将矩阵分成四个部分:
                                  1 | 2
                                  3 | 4
            (i,j)在1位置,(j,n-i)在2位置,(n-i,n-j)在4位置,(n-j,i)在3位置
            因此可以直接遍历1中的所有元素,每个元素都进行“一轮”交换,就能得到最终的结果
        */ 
        int n = matrix.length - 1;
        int temp;
        for(int i = 0;i < matrix.length / 2;i++){
            for(int j = 0;j < (matrix.length + 1) / 2;j++){
                temp = matrix[i][j];
                matrix[i][j] = matrix[n-j][i];
                matrix[n-j][i] = matrix[n-i][n-j];
                matrix[n-i][n-j] = matrix[j][n-i];
                matrix[j][n-i] = temp;
            }
        }
 
    }

方法2:矩阵翻转

class Solution {

    public void exchange(int[][] matrix,int i,int j,int tarI,int tarJ){
        int temp = matrix[i][j];
        matrix[i][j] = matrix[tarI][tarJ];
        matrix[tarI][tarJ] = temp;
    }

    public void rotate(int[][] matrix) {
        /**

            每个元素最后的位置为(i,j) -> (j,n-i) ;这里n是matrix.length-1
            想办法看能不能进行多次翻转操作得到结果。
            常用的翻转:1.水平翻转:(i,j)->(n-i,j) 2.左右翻转:(i,j)->(i,n-j)
                      3.对角线翻转:(i,j)->(j,i) 4.反对角线翻转:(i,j)->(n-j,n-i)
            可以有很多种组合得到需要的结果
                这里选择(i,j)水平(n-i,j)对角线(j,n-i)
        */
        int n = matrix.length - 1;
        //1.先水平
        for(int i = 0;i < matrix.length / 2;i++){
            for(int j = 0;j < matrix.length;j++)
                exchange(matrix,i,j,n-i,j);
        }
        //2.再对角线
        for(int i = 0;i < matrix.length;i++){
            for(int j = i+1;j < matrix.length;j++)
                exchange(matrix,i,j,j,i);
        }
    }
}

相关推荐

  1. leetcode48. 旋转图像

    2024-03-29 02:12:01       43 阅读
  2. leetcode48 旋转图像

    2024-03-29 02:12:01       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 02:12:01       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 02:12:01       97 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 02:12:01       78 阅读
  4. Python语言-面向对象

    2024-03-29 02:12:01       88 阅读

热门阅读

  1. QT(3/26)

    QT(3/26)

    2024-03-29 02:12:01      35 阅读
  2. 被迫走上前端之路第三课之vue的v-on事件监听

    2024-03-29 02:12:01       40 阅读
  3. Poetry是一个现代的Python包管理工具

    2024-03-29 02:12:01       37 阅读
  4. 戴维南定理和诺顿定理的解题步骤

    2024-03-29 02:12:01       42 阅读
  5. ARM_dsp_math函数使用

    2024-03-29 02:12:01       38 阅读
  6. ubuntu16 apt安装程序锁死解决

    2024-03-29 02:12:01       43 阅读