共计 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
}
}
};
正文完
发表至: javascript
2021-07-07