前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将数组旋转90度(旋转图像)

将数组旋转90度(旋转图像)

作者头像
用户5513909
发布2023-04-25 11:30:13
1.6K0
发布2023-04-25 11:30:13
举报

You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). Follow up: Could you do this in-place?

思路 : 1、将旋转拆列解为对矩阵一圈一圈的做旋转,如下图中的①②。 2、若圈为NxN, 则需要对n-1个数进行旋转

在这里插入图片描述
在这里插入图片描述

3、旋转对应规则 假设对应矩阵左上角坐标为(LR,LC),右下角坐标为(RR,RC)。则 需要旋转的个数times = RC -LC; 左上角元素开始,从左到右进行旋转。 每次旋转一个数,会影响四个数的位置,其中对应关系为: m[LR][LC + i] = m[RR - i][LC] m[RR - i][LC] = m[RR][RC - i] m[RR][RC - i] = m[LR + i][RC] m[LR + i][RC] = m[LR][LC + i] (i表示每一圈的第i次,从 0 开始) 如下图中相同颜色,则是相关的四个数,这四个数按照上述的关系进行交换。

在这里插入图片描述
在这里插入图片描述

代码如下:

代码语言:javascript
复制
public class RotateMatrix{
    public static void rotate(int[][] matrix) {
        int LR = 0;
        int LC = 0;
        int RR = matrix.length - 1;
        int RC = matrix[0].length - 1;
        while(LR < RR){ //只要还保持对应的左右对角关系就继续
            rotateEdge(matrix, LR++, LC++, RR--, RC--);
        }
    }

    public static void rotateEdge(int[][] m, int LR, int LC, int RR, int RC){
        int times = RC - LC; //旋转的数字个数
        int tmp = 0;
        for (int i = 0; i != times; i++) { 
            tmp = m[LR][LC + i];
            m[LR][LC + i] = m[RR - i][LC];
            m[RR - i][LC] = m[RR][RC - i];
            m[RR][RC - i] = m[LR + i][RC];
            m[LR + i][RC] = tmp;
        }
    }

    public static void printMatrix(int[][] matrix) {
        for (int i = 0; i != matrix.length; i++) {
            for (int j = 0; j != matrix[0].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }


    public static void main(String[] args) {
        int [][] matrix = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16} };
        printMatrix(matrix);
        rotate(matrix);
        System.out.println("==================");
        printMatrix(matrix);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档