48、旋转图像

旋转图像

题目链接

旋转图像

题目描述

在这里插入图片描述

解题思路

方法1:分块旋转

​ 这个可以把整个矩阵分成四块去旋转。类似于数组的移动,先将其中一个存储起来,然后以此使其等于下一个。直到最后那个等于存起来的值。
在这里插入图片描述

​ 就如图一般,将矩阵A存入临时数组temp,将矩阵B赋给矩阵A,将矩阵C赋给矩阵B,将矩阵D赋给矩阵C,将临时数组temp赋给矩阵A,这样就完成了矩阵图像的旋转。

​ 矩阵也分奇数行,和偶数行,不过奇数行的最中间那一格不用动,偶数行的矩阵和奇数行的运转是一样的。

​ 这个的关键在于如何控制小矩阵变换的时候,下标的值。我们现在给矩阵的每个角都写上顺序,这样可以更清楚的计算矩阵移动时的下标,必须每个下标都和被赋值的相对应。

在这里插入图片描述

代码
class Solution {
    public void rotate(int[][] matrix) {

        int n = matrix.length;
        if(n == 0)
            return ;

        int b = n / 2;  //宽
        int a = n - b;  //长

        int[][] temp = new int[b][a];

        for(int i = 0;i < b;i++){       //将矩阵A存储到临时数组中
            for(int j = 0;j < a;j++){

                temp[i][j] = matrix[a - j - 1][i];

            }
        }

        for(int i = 0;i < b;i++){       //将矩阵B移动到矩阵A的位置
            for(int j = 0;j < a;j++){
                matrix[a - j - 1][i] = matrix[n - i - 1][a - j - 1];
            }
        }

         for(int i = 0;i < b;i++){       //将矩阵C移动到矩阵B的位置
            for(int j = 0;j < a;j++){
                matrix[n - i - 1][a - j - 1] = matrix[b + j][n - i - 1];
            }
        }

         for(int i = 0;i < b;i++){       //将矩阵D移动到矩阵C的位置
            for(int j = 0;j < a;j++){
                matrix[b + j][n - i - 1] = matrix[i][b + j];
            }
        }

         for(int i = 0;i < b;i++){       //将存储矩阵A的临时数组放置到矩阵D的位置
            for(int j = 0;j < a;j++){
                matrix[i][b + j] = temp[i][j];
            }
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值