【模拟】顺时针旋转矩阵

求解代码

java 复制代码
public int[][] rotateMatrix(int[][] mat, int n) {
        // 空矩阵、空方阵直接返回
        if (mat == null || n == 0) {
            return mat;
        }

        // 矩阵转置(行和列互换)
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                int tmp = mat[i][j];
                mat[i][j] = mat[j][i];
                mat[j][i] = tmp;
            }
        }

        // 反转转置后矩阵的每一行,完成顺时针90度旋转
        for (int[] row : mat) {
            reverse(row);
        }

        return mat;
    }

    // 双指针法原地反转一维数组
    private void reverse(int[] arr) {
        int left = 0;
        int right = arr.length - 1;
        while (left < right) {
            // 交换左右指针元素
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
            left++;
            right--;
        }
    }

小贴士

j0 开始会让对角线上下的元素对 被交换两次,交换两次就等于没交换,而ji开始能保证每个元素对只被交换一次。

相关推荐
盐水冰22 分钟前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习
凸头25 分钟前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun31415928 分钟前
线程安全需要保证几个基本特征
java·开发语言·jvm
努力也学不会java1 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
攒了一袋星辰1 小时前
高并发强一致性顺序号生成系统 -- SequenceGenerator
java·数据库·mysql
小涛不学习1 小时前
Spring Boot 详解(从入门到原理)
java·spring boot·后端
于先生吖2 小时前
Java框架开发短剧漫剧系统:后台管理与接口开发
java·开发语言
daidaidaiyu2 小时前
Spring IOC 源码学习 声明式事务的入口点
java·spring
myloveasuka3 小时前
[Java]查找算法&排序算法
java·算法·排序算法
清水白石0083 小时前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法