题目
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]
示例 2:
输入: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]]
思路
好的,以下是关于 LeetCode 第 48 题的 Typescript 解法。
题目描述
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。
示例:
输入:
csharpCopy code
[ [1,2,3],
[4,5,6],
[7,8,9]
]
输出:
csharpCopy code
[ [7,4,1],
[8,5,2],
[9,6,3]
]
思路
此题可以先将矩阵先进行上下翻转,然后再沿着左上到右下的对角线翻转即可得到结果。
function rotate(matrix: number[][]): void {
let row = matrix.length;
let col = matrix[0].length;
// 上下翻转
for (let i = 0; i < row / 2; i++) {
for (let j = 0; j < col; j++) {
let temp = matrix[i][j];
matrix[i][j] = matrix[row - i - 1][j];// row - i - 1 和 i翻转
matrix[row - i - 1][j] = temp;
}
}
// 对角线翻转
for (let i = 0; i < row; i++) {
for (let j = i + 1; j < col; j++) {
let temp = matrix[i][j];
matrix[i][j] = matrix[j][i];// i 和 j换
matrix[j][i] = temp;
}
}
}
复杂度分析
- 时间复杂度为 ,因为需要遍历整个矩阵。
- 空间复杂度为 ,没有使用额外的空间,只是对原数组进行了修改。