mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-04 16:12:47 +08:00
93 lines
2.5 KiB
Markdown
Executable File
93 lines
2.5 KiB
Markdown
Executable File
# [48. Rotate Image](https://leetcode.com/problems/rotate-image/)
|
||
|
||
## 题目
|
||
|
||
You are given an *n* x *n* 2D matrix representing an image.
|
||
|
||
Rotate the image by 90 degrees (clockwise).
|
||
|
||
**Note:**
|
||
|
||
You have to rotate the image **[in-place](https://en.wikipedia.org/wiki/In-place_algorithm)**, which means you have to modify the input 2D matrix directly. **DO NOT** allocate another 2D matrix and do the rotation.
|
||
|
||
**Example 1**:
|
||
|
||

|
||
|
||
Given input matrix =
|
||
[
|
||
[1,2,3],
|
||
[4,5,6],
|
||
[7,8,9]
|
||
],
|
||
|
||
rotate the input matrix in-place such that it becomes:
|
||
[
|
||
[7,4,1],
|
||
[8,5,2],
|
||
[9,6,3]
|
||
]
|
||
|
||
|
||
**Example 2**:
|
||
|
||

|
||
|
||
Given input matrix =
|
||
[
|
||
[ 5, 1, 9,11],
|
||
[ 2, 4, 8,10],
|
||
[13, 3, 6, 7],
|
||
[15,14,12,16]
|
||
],
|
||
|
||
rotate the input matrix in-place such that it becomes:
|
||
[
|
||
[15,13, 2, 5],
|
||
[14, 3, 4, 1],
|
||
[12, 6, 8, 9],
|
||
[16, 7,10,11]
|
||
]
|
||
|
||
|
||
## 题目大意
|
||
|
||
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
|
||
|
||
|
||
## 解题思路
|
||
|
||
- 给出一个二维数组,要求顺时针旋转 90 度。
|
||
- 这一题比较简单,按照题意做就可以。这里给出 2 种旋转方法的实现,顺时针旋转和逆时针旋转。
|
||
|
||
```c
|
||
/*
|
||
* clockwise rotate 顺时针旋转
|
||
* first reverse up to down, then swap the symmetry
|
||
* 1 2 3 7 8 9 7 4 1
|
||
* 4 5 6 => 4 5 6 => 8 5 2
|
||
* 7 8 9 1 2 3 9 6 3
|
||
*/
|
||
void rotate(vector<vector<int> > &matrix) {
|
||
reverse(matrix.begin(), matrix.end());
|
||
for (int i = 0; i < matrix.size(); ++i) {
|
||
for (int j = i + 1; j < matrix[i].size(); ++j)
|
||
swap(matrix[i][j], matrix[j][i]);
|
||
}
|
||
}
|
||
|
||
/*
|
||
* anticlockwise rotate 逆时针旋转
|
||
* first reverse left to right, then swap the symmetry
|
||
* 1 2 3 3 2 1 3 6 9
|
||
* 4 5 6 => 6 5 4 => 2 5 8
|
||
* 7 8 9 9 8 7 1 4 7
|
||
*/
|
||
void anti_rotate(vector<vector<int> > &matrix) {
|
||
for (auto vi : matrix) reverse(vi.begin(), vi.end());
|
||
for (int i = 0; i < matrix.size(); ++i) {
|
||
for (int j = i + 1; j < matrix[i].size(); ++j)
|
||
swap(matrix[i][j], matrix[j][i]);
|
||
}
|
||
}
|
||
``` |