将正方形矩阵顺时针转动 90°

将正方形矩阵顺时针转动 90°

【题目】

给定一个 N×N 的矩阵 matrix,把这个矩阵调整成顺时针转动 90°后的形式。 例如:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

顺时针转动 90°后为:

13 9 5 1

14 10 6 2

15 11 7 3

16 12 8 4

【要求】

额外空间复杂度为 O(1)。

思路:

这里使用分圈处理的方式,在矩阵中用左上角的坐标(tR,tC)和右下角的坐标(dR,dC)就可以 表示一个子矩阵。比如,题目中的矩阵,当(tR,tC)=(0,0)、(dR,dC)=(3,3)时,表示的子矩阵就是整 个矩阵,那么这个子矩阵最外层的部分如下。

1 2 3 4

5 8

9 12

13 14 15 16

在这个外圈中,1,4,16,13 为一组,然后让 1 占据 4 的位置,4 占据 16 的位置,16 占 据 13 的位置,13 占据 1 的位置,一组就调整完了。然后 2,8,15,9 为一组,继续占据调整 的过程,最后 3,12,14,5 为一组,继续占据调整的过程。(tR,tC)=(0,0)、(dR,dC)=(3,3)的子矩 阵外层就调整完毕。接下来令 tR 和 tC 加 1,即(tR,tC)=(1,1),令 dR 和 dC 减 1,即(dR,dC)=(2,2), 此时表示的子矩阵如下。

6 7

10 11

这个外层只有一组,就是 6,7,11,10,占据调整之后即可。所以,如果子矩阵的大小是 M×M,一共就有 M-1 组,分别进行占据调整即可。

java 复制代码
public class rotateEdge {
    public int[][] rotate(int[][] matrix){
        if(matrix.length==0)
        {
            throw new RuntimeException();
        }
        int tR=0;
        int tC=0;
        int dR=matrix.length-1;
        int dC=matrix[0].length-1;
        while(tR<dR)
        {
            RotateEdge(matrix,tR++,tC++,dR--,dC--);
        }
        return matrix;
    }

    public void RotateEdge(int[][] matrix, int tR, int tC, int dR, int dC) {
        int times=dC-tC;
        int temp;
        for(int i=0;i<times;i++)
        {
            temp=matrix[tR][tC+i];
            matrix[tR][tC+i]=matrix[dR-i][tC];
            matrix[dR-i][tC]=matrix[dR][dC-i];
            matrix[dR][dC-i]=matrix[tR+i][dC];
            matrix[tR+i][dC]=temp;
        }
    }
}
相关推荐
passer__jw76710 分钟前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
Ocean☾16 分钟前
前端基础-html-注册界面
前端·算法·html
顶呱呱程序24 分钟前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
爱吃生蚝的于勒1 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~1 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
王哈哈^_^1 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
星沁城1 小时前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
脉牛杂德2 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz2 小时前
STL--哈希
c++·算法·哈希算法
kingmax542120082 小时前
初三数学,最优解问题
算法