旋转矩阵

34 篇文章 1 订阅
6 篇文章 0 订阅

给定一个 × n 的二维矩,将图像顺时针旋转90度,且必须原地旋转,即不能借助其他矩阵来完成旋转操作,示例如下

matrix = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
]
//原地旋转输入矩阵,使其变为:
matrix = [
  [7,4,1],
  [8,5,2],
  [9,6,3]
]
12345
678910
1112131415
1617181920
2122232425

 

上面矩阵实际上是按照下图进行变换操作的

最外层顺时针,再往里一层顺时针旋转直到最后一层,因此再遍历的时候有如下变换公式(当前对象和目标对象的下表关系)

  • 当前坐标为:(i , j)
  • 当前矩阵的行数:length

由上面两个条件可以得到目标交换的坐标为:(j , length - i - 1),按照此思路的代码如下:

/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var rotate = function(matrix) {
    let len = matrix.length;
    let real_len = (len/2).toFixed(0);
    for (let i = 0; i < real_len; i++) {
        for (let j = i; j < len - i - 1; j++) {
            let x1 = i,
                y1 = j,
                x2 = y1,
                y2 = len - x1 - 1,
                x3 = y2,
                y3 = len - x2 - 1,
                x4 = y3,
                y4 = len - x3 - 1;
            let val1 = matrix[x1][y1];
            let val2 = matrix[x2][y2];
            let val3 = matrix[x3][y3];
            let val4 = matrix[x4][y4];
            matrix[x2][y2] = val1;
            matrix[x3][y3] = val2;
            matrix[x4][y4] = val3;
            matrix[x1][y1] = val4;
        }
    }
};

 

以上是用最简单粗暴的方式来实现同一个矩阵上进行矩阵的旋转

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值