Skip to content

Commit f626056

Browse files
committed
Create Solution 048[CPP]
1 parent 952c15a commit f626056

File tree

2 files changed

+111
-0
lines changed

2 files changed

+111
-0
lines changed

solution/048.Rotate Image/README.md

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
## 48旋转图像
2+
3+
### 问题描述
4+
给定一个 n × n 的二维矩阵表示一个图像。
5+
6+
将图像顺时针旋转 90 度。
7+
8+
说明:
9+
10+
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
11+
```
12+
示例 1:
13+
给定 matrix =
14+
[
15+
[1,2,3],
16+
[4,5,6],
17+
[7,8,9]
18+
],
19+
20+
原地旋转输入矩阵,使其变为:
21+
[
22+
[7,4,1],
23+
[8,5,2],
24+
[9,6,3]
25+
]
26+
27+
示例 2:
28+
给定 matrix =
29+
[
30+
[ 5, 1, 9,11],
31+
[ 2, 4, 8,10],
32+
[13, 3, 6, 7],
33+
[15,14,12,16]
34+
],
35+
36+
原地旋转输入矩阵,使其变为:
37+
[
38+
[15,13, 2, 5],
39+
[14, 3, 4, 1],
40+
[12, 6, 8, 9],
41+
[16, 7,10,11]
42+
]
43+
```
44+
45+
### 思路:
46+
47+
本来以为是矩阵坐标表换的一种,用初等行变换做,但是这里和矩阵坐标没任何关系,而是整个矩阵旋转,所以老实找规律
48+
49+
```
50+
1 2 3 顺90° 7 4 1
51+
4 5 6 ========> 8 5 2
52+
7 8 9 9 6 3
53+
54+
等价于
55+
56+
1 2 3 转置 1 4 7 左右互换 7 4 1
57+
4 5 6 ========> 2 5 8 ===========> 8 5 2
58+
7 8 9 3 6 9 9 6 3
59+
60+
先当做是一种规律,数学证明以后补
61+
```
62+
63+
1. 先将矩阵转置
64+
2. 左右各列对称互换
65+
66+
```CPP
67+
class Solution {
68+
public:
69+
void rotate(vector<vector<int>>& matrix) {
70+
71+
int n = matrix.size();
72+
if(n <= 1)return ;
73+
74+
//先做转置
75+
for(int i = 0 ; i < n ; i++){
76+
for(int j = i;j < n ;j++){
77+
swap(matrix[i][j],matrix[j][i]);
78+
}
79+
}
80+
81+
//再做水平互换
82+
for(int i = 0 ; i < n ; i++){
83+
for(int j = 0;j < n/2;j++){
84+
swap(matrix[i][j],matrix[i][n-1-j]);
85+
}
86+
}
87+
}
88+
};
89+
```
+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
void rotate(vector<vector<int>>& matrix) {
4+
5+
int n = matrix.size();
6+
if(n <= 1)return ;
7+
8+
//先做转置
9+
for(int i = 0 ; i < n ; i++){
10+
for(int j = i;j < n ;j++){
11+
swap(matrix[i][j],matrix[j][i]);
12+
}
13+
}
14+
15+
//再做水平互换
16+
for(int i = 0 ; i < n ; i++){
17+
for(int j = 0;j < n/2;j++){
18+
swap(matrix[i][j],matrix[i][n-1-j]);
19+
}
20+
}
21+
}
22+
};

0 commit comments

Comments
 (0)