3.10 48.旋转图像
给定一个 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]]
提示:
n == matrix.length == matrix[i].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000
我的思路:
列变成行,行变成列
原地旋转矩阵
我的思路:找规律??
行变成列,列变成行
1 2 3
4 5 6
7 8 9
变成
1 4 7
2 5 8
3 6 9
第一个和最后一个互换位置
7 4 1
8 5 2
9 6 3
遇到了一些错误:
- 直接循环整个矩阵,导致两次交换又返回到了之前的数组=>直接交换上三角就可以啦
for(let i = 0 ; i < row ; i++){
for(let j = i ; j < col ; j++){
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
- 在对每一行进行交换的时候,因为我只对三阶的矩阵找规律,所以只交换了第一个和最后一个,但是交换一个是随着col的增大而变化的
for(let i = 0 ; i < row ; i++){
for(let j = 0 ; j < col / 2 ; j++){
temp = matrix[i][j];
matrix[i][j] = matrix[i][col - j - 1];
matrix[i][col - j - 1] = temp;
}
}
正确代码如下:
function rotate(matrix: number[][]): void {
let row = matrix.length;
let col = matrix[0].length;
let temp = 0 ;
// 循环第一次:交换行和列,循环上三角
for(let i = 0 ; i < row ; i++){
for(let j = i ; j < col ; j++){
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// 循环第二次:交换第一个和最后一个,只是在3阶是这样的
for(let i = 0 ; i < row ; i++){
for(let j = 0 ; j < col / 2 ; j++){
temp = matrix[i][j];
matrix[i][j] = matrix[i][col - j - 1];
matrix[i][col - j - 1] = temp;
}
}
};
击败了100%!!!!,最近太厉害啦哈哈哈哈
感觉矩阵就是找规律???对角线很关键