旋转图像
题目
给定一个 n * n
的二维矩阵 matrix
表示一个图像. 请你 将图像顺时针旋转 90
度. 你必须在原地旋转图像, 这意味着你需要直接修改输入的二维矩阵. 请不要使用另一个矩阵来旋转图像.
提示:
n == matrix.length == matrix[i].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000
示例
输入: matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
输出: [[7, 4, 1], [8, 5, 2], [9, 6, 3]]
输入: 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]]
题解
题目给了 n * n
, 说明这是一个方形矩阵. 具体的思路是先沿对角线替换, 以示例一为例, 让 2
和 4
交换, 3
和 7
交换, 6
和 8
交换, 得到如下新矩阵(中间).
然后对着每一行进行 反转, 就可以得到结果了.
1 2 3 斜对角线交换 1 4 7 逐行反转 7 4 1
4 5 6 ---------------> 2 5 8 -------------> 8 5 2
7 8 9 3 6 9 9 6 3
- JavaScript
- Rust
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function (matrix) {
const n = matrix.length
for (let i = 0; i < n; i++) {
for (let j = i; j < n; j++) {
;[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]]
}
}
for (let i = 0; i < n; i++) {
matrix[i].reverse()
}
}
pub fn rotate(matrix: &mut Vec<Vec<i32>>) {
let n = matrix.len();
for i in 0..n {
for j in i..n {
let temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
for i in 0..n {
matrix[i].reverse();
}
}