矩阵的几种基础变换

一、转置

java 复制代码
for (int i = 0; i < n; i++)
    for (int j = i+1; j < n; j++)   // 只遍历上三角,避免重复交换
        swap(matrix[i][j], matrix[j][i]);

867. 转置矩阵 - 力扣(LeetCode)

二、翻转

水平翻转(左右翻转)

java 复制代码
public void horizontalFlip(int[][] matrix) {
    int n = matrix.length;
    for (int i = 0; i < n; i++) {
        int[] row = matrix[i];
        for (int j = 0; j < n / 2; j++) {   // 只走到一半,避免换两次
            int tmp = row[j];
            row[j] = row[n - 1 - j];
            row[n - 1 - j] = tmp;
        }
    }
}

垂直翻转(上下翻转)

写法一:原地,交换行内元素

java 复制代码
public void verticalFlip(int[][] matrix) {
    int n = matrix.length;
    int m = matrix[0].length;
    for (int i = 0; i < n / 2; i++) {
        for (int j = 0; j < m; j++) {
            int tmp = matrix[i][j];
            matrix[i][j] = matrix[n - 1 - i][j];
            matrix[n - 1 - i][j] = tmp;
        }
    }
}

写法二:原地,交换整行引用

java 复制代码
public void verticalFlip(int[][] matrix) {
    int n = matrix.length;
    for (int i = 0; i < n / 2; i++) {
        int[] tmp = matrix[i];
        matrix[i] = matrix[n - 1 - i];
        matrix[n - 1 - i] = tmp;
    }
}

三、旋转

顺时针90° = 转置+每行左右翻转

逆时针90° = 转置+每行上下翻转

48. 旋转图像 - 力扣(LeetCode)

旋转180° = 中心对称 = 水平翻转+垂直翻转

因为 180° 是中心对称,每对元素只交换一次。遍历左上四分之一区域即可避免重复:

java 复制代码
public void rotate180(int[][] matrix) {
    int n = matrix.length;
    for (int i = 0; i < (n + 1) / 2; i++) {
        for (int j = 0; j < n / 2; j++) {
            int tmp = matrix[i][j];
            matrix[i][j] = matrix[n - 1 - i][n - 1 - j];
            matrix[n - 1 - i][n - 1 - j] = tmp;
        }
    }
}
相关推荐
步行cgn43 分钟前
Spring MVC 拦截器 Interceptor 详解:从执行流程到实战应用
java·spring·mvc
文丑颜不良啊1 小时前
LeetCode1381~1400题目解析
java·leetcode
开开心心_Every1 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
是main不是漫1 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
萧瑟余晖2 小时前
Spring Batch核心模型与快速上手详解
java·spring·batch
缓慢更新2 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
深圳市快瞳科技有限公司2 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
LMT流氓兔4 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
专注仿真4 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
小豆庄4 小时前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11