旋转矩阵
Sunny-117 opened this issue · 3 comments
Sunny-117 commented
旋转矩阵
lxy-Jason commented
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function(matrix) {
const n = matrix.length;
const matrix_new = new Array(n).fill(0).map(() => new Array(n).fill(0)); //新矩阵
for(let i = 0; i < n; i++){
for(let j = 0; j < n; j++){
matrix_new[j][n - i - 1] = matrix[i][j];
//重点在这里,对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个位置。
//倒数第i列相当于正数n-i列,因为下标从0开始,所以这里还要-1,第j个位置其实就是第j行
}
}
for(let i = 0; i < n; i++){
for(let j = 0; j < n; j++){
matrix[i][j] = matrix_new[i][j];
}
}
};
Achetto commented
情况一:顺时针转 90 度:先转置再左右镜像
情况二:顺时针转 180 度:先上下镜像,再左右镜像(先左右再上下也可)
情况三:顺时针转 270 度:先转置再上下镜像
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function(matrix) {
const l = matrix.length - 1;
// 转置
for (let i = 0; i <= l; i++) {
for (let j = 0; j <= i; j++) {
[matrix[i][j],matrix[j][i]] = [matrix[j][i],matrix[i][j]];
}
}
// 左右翻转
for (let i = 0; i <= l; i++) {
for (let j = 0; j <= Math.floor(l / 2); j++) {
[matrix[i][j],matrix[i][l - j]] = [matrix[i][l - j],matrix[i][j]];
}
}
};
HangHZhang commented
function rotateMatrix(m: number[][]):void {
let m_length: number = m[0].length;
let temp: number;
for (let i = 0; i < m_length; i++) {
for (let j = 0; j < Math.floor(m_length>>1); j++) {
temp = m[i][j];
m[i][j] = m[i][m_length-1-j];
m[i][m_length-1-j]=temp;
}
}
for (let i = 0; i < m_length-1; i++) {
for (let j = 0; j < m_length-i-1; j++) {
temp = m[i][j];
m[i][j] = m[m_length-1-j][m_length-1-i];
m[m_length-1-j][m_length-1-i] = temp;
}
}
}