【模拟】顺时针旋转矩阵

求解代码

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开始能保证每个元素对只被交换一次。

相关推荐
weixin_440784112 小时前
【HandlerThread实现原理】
android·java·开发语言
leoZ2312 小时前
本地跑大模型实战(七):llama.cpp 性能调优,让推理更快更省
java·人工智能·spring·生成对抗网络·语言模型·自然语言处理·llama
mubei-1234 小时前
SpringDAO的用法
java·开发语言·数据库
happymagic4 小时前
java spring boot做的jar包程序,如何实现自动运行启动
java·运维·服务器·spring boot·jar
都叫我大帅哥6 小时前
给 Java 程序员的 CSRF 攻击详解:从原理到防御实战
java
江南十四行7 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
fb_123457 小时前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
码智社8 小时前
JSON 零基础到资深全体系教程
java·json
wgego9 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
IKUN家族9 小时前
Spring MVC(四)
java·spring·mvc