关于javascript:JS原地旋转正方形矩阵

6次阅读

共计 859 个字符,预计需要花费 3 分钟才能阅读完成。

这个原地旋转,中午午休前 依照坐标旋转,没做进去。早晨睡觉忽然想到,一圈一圈的旋转,一次只思考一行,嗯挺简略的,第二天早上做进去了,是一个数组转换成另一个数组。然而 不是原始数组旋转。
如果原始数组旋转,须要一次转 4 个角的点。然而总是一部分坐标旋转谬误。
起初通过剖析,如果 X 轴作为圈,Y 轴是不能超过 X 的坐标范畴的,即 X <=Y<length-1-X

 给定 matrix =
[[ 5, 1, 9,11],
  [2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16]
], 

原地旋转输出矩阵,使其变为:
[[15,13, 2, 5],
  [14, 3, 4, 1],
  [12, 6, 8, 9],
  [16, 7,10,11]
]
/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var rotate = function(matrix) {
    let len = matrix.length-1
    let h = matrix.length/2
    let lt
    
    // 如果是 4 个数 旋转 0,1 小于 2,3 个数旋转 0,1 小于 1.5
    for(let x = 0; x<h; x++) {
        // x 代表旋转的外环,y 的终点和完结点是不能超过 x 这个外环的
        for(let y = x; y<len-x; y++) {// 如果是两个数组转换 newMatrix[y][len-x] = matrix[x][y] 只思考如第一行变成最初一列 即可

            // 点的旋转 可能比拟烧脑,如果先把一整行的旋转想明确点的旋转也清晰了

            // 先缓存 左上角的点
            lt = matrix[x][y]
            // 左下角的点 替换左上角的点
            matrix[x][y] = matrix[len-y][x]
            // 右下角点点 替换左下角的点
            matrix[len-y][x] = matrix[len-x][len-y]
            // 右上角的点替换 右下角的点
            matrix[len-x][len-y] = matrix[y][len-x]
        // 左上角的点 替换 右上角的点
            matrix[y][len-x] = lt
        }

    }

};
正文完
 0