算法必刷题-旋转图像

hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧!

在这里插入图片描述

function rotate(matrix) {
    // 获取矩阵的边长,因为是 n × n 的矩阵,所以行数和列数都为 n
    const n = matrix.length;

    // 第一步:沿主对角线(从左上角到右下角)翻转矩阵
    // 主对角线元素位置特点是行索引和列索引相等
    // 我们只需要交换主对角线一侧的元素与另一侧对称位置的元素即可
    for (let i = 0; i < n; i++) {
        // 从主对角线开始,因为主对角线左侧的元素已经在之前的循环中交换过了
        for (let j = i; j < n; j++) {
            // 交换 matrix[i][j] 和 matrix[j][i] 的值
            // 使用数组解构赋值实现元素交换
            [matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
        }
    }

    // 第二步:将每一行进行左右翻转
    for (let i = 0; i < n; i++) {
        // 定义左指针,指向当前行的第一个元素
        let left = 0;
        // 定义右指针,指向当前行的最后一个元素
        let right = n - 1;
        // 当左指针小于右指针时,继续交换元素
        while (left < right) {
            // 交换当前行中左指针和右指针所指元素的值
            [matrix[i][left], matrix[i][right]] = [matrix[i][right], matrix[i][left]];
            // 左指针右移一位
            left++;
            // 右指针左移一位
            right--;
        }
    }

    return matrix;
}

// 测试示例
const matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];
rotate(matrix);
console.log(matrix);

代码思路分析

  • 要将一个 n × n 的二维矩阵顺时针旋转 90 度,我们可以通过以下两个步骤实现:
  • 沿主对角线翻转矩阵:主对角线是从矩阵的左上角到右下角的对角线。经过这一步操作后,原本在 (i, j) 位置的元素会移动到 (j, i)
    位置。
  • 将每一行进行左右翻转:经过第一步操作后,再将每一行的元素从左到右进行反转,就可以得到顺时针旋转 90 度后的矩阵。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值