leetcode 48题 [medium]
中:旋转图像
英:Rotate Image
题解1
1. 思路:从外层到里层一层一层旋转
2. 时间复杂度:O(n²)
3. 空间复杂度:O(1)
4. 实现
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function(matrix) {
let matrixLen = matrix.length;
for(let layer=0, maxLayer=Math.floor(matrixLen/2); layer<maxLayer; layer++){
for(let column=layer; column<matrixLen-layer-1; column++){
// 旋转 (ES6 解构语法)
[
matrix[layer][column],
matrix[column][matrixLen-1-layer],
matrix[matrixLen-1-layer][matrixLen-1-column],
matrix[matrixLen-1-column][layer]
]
=
[
matrix[matrixLen-1-column][layer],
matrix[layer][column],
matrix[column][matrixLen-1-layer],
matrix[matrixLen-1-layer][matrixLen-1-column]
]
}
}
};
题解2
1. 思路:翻转
- 先水平翻转
- 再转置(沿主对角线翻转)
2. 时间复杂度:O(n²)
3. 空间复杂度:O(1)
4. 实现
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function(matrix) {
let matrixLen = matrix.length;
// 先水平翻转
for(let i=0, maxI=Math.floor(matrixLen/2); i<maxI; i++){
[matrix[i], matrix[matrixLen-1-i]] = [matrix[matrixLen-1-i], matrix[i]];
}
// 再转置(沿主对角线翻转)
for(let i=0; i<matrixLen; i++){
for(let j=i+1; j<matrixLen; j++){
[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
}
}
};