矩阵的几种基础变换

一、转置

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;
        }
    }
}
相关推荐
垆边人似月.4 分钟前
华为题:全排列
算法·深度优先·图论
杜 硕13 分钟前
快速排序详解01
数据结构·算法·排序算法
Matlab程序猿29 分钟前
【MATLAB源码-第459期】基于matlab的D-H模型与阻尼最小二乘逆运动学的六自由度机械臂五次轨迹规划及动力学前馈PD控制仿真。
人工智能·算法·matlab·d-h建模·六自由度串联机械臂
信奥卷王30 分钟前
[GESP202606 六级] 满二叉树
数据结构·算法
10mAh40 分钟前
【Java】ArrayList 遍历删除为什么报错?三种写法与漏删复现
java·开发语言·windows
积流成海40 分钟前
用代码实现哈希计算器:Web Crypto API 实战
前端·算法·哈希算法·哈希函数·盘子工具站
Nil2081 小时前
leetcode 300最长递增子序列
算法·leetcode·职场和发展
thefool1122661 小时前
多线程 4
java
Rain的Java大神之路1 小时前
[特殊字符]8年Java老兵转型AI Agent:90%的人挂在同一个坑,根本不用学Python!(万字实战复盘,建议收藏)
java·数据库·人工智能·后端·python·spring·ai编程
垆边人似月.2 小时前
华为机试题 :最大数
c++·算法·华为