LeetCode - 48. Rotate Image(将正方形矩阵旋转90度)

本文介绍了一种解决LeetCode上编号为48的题目“旋转图像”的高效算法。该算法采用分圈处理的方式,通过多次替换四个边界上的元素来实现矩阵的旋转。代码实现了对正方形矩阵进行90度顺时针旋转的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode - 48. Rotate Image(将正方形矩阵旋转90度)

题目链接
题意

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

解析

  • 这个也是一个宏观的调度问题,还是使用分圈的处理方式,每次对一个矩阵的外围进行处理(边界)跑;
  • 我们发现只要替换四个数,替换n-1次,就把外面的边界替换好了,然后我们缩小范围(左上角的(ar,ac)和右下角的(br,bc)分别减一),就可以完成操作,如下图:

这里写图片描述

代码如下:

class Solution {

    public void rotate(int[][] matrix) {
        int ar = 0;
        int ac = 0;
        int br = matrix.length - 1;
        int bc = matrix[0].length - 1;
        while (ar <= br && ac <= bc) {
            rotateEdge(matrix, ar++, ac++, br--, bc--);
        }
    }

    //具体的分圈的交换旋转
    private void rotateEdge(int[][] matrix, int ar, int ac, int br, int bc) {
        int times = bc - ac;
        int tmp = 0;

        for (int i = 0; i < times; i++) {// times - 1次  每次交换四个点的值
            tmp = matrix[ar][ac + i];
            matrix[ar][ac + i] = matrix[br - i][ac];
            matrix[br - i][ac] = matrix[br][bc - i];
            matrix[br][bc - i] = matrix[ar + i][bc];
            matrix[ar + i][bc] = tmp;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值