给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。(不能使用额外矩阵空间)
思路:
◇ 可以看出 n * n 的二维矩阵的顺时针旋转存在一定的规律性,随后对旋转完成之后的矩阵和初始的矩阵进行对比,发现其本质就是矩阵先进行对角互换,之后进行左右互换。
/**
Do not return anything, modify matrix in-place instead.
*/
function rotate(matrix: number[][]): void {
if(!matrix.length)
return;
// 记录当前矩阵的行列
let row = matrix.length;
let column = matrix[0].length;
// 对角交换
for(let i=0; i<row; i++) {
for(let j=i; j<column; j++) {
const temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// 左右交换
for(let i=0; i<row; i++) {
for(let j=Math.floor(column/2); j<column; j++) {
const temp = matrix[i][j];
matrix[i][j] = matrix[i][column - j - 1];
matrix[i][column - j - 1] = temp;
}
}
};