旋转矩阵

Leetcode-48

下面给出两种解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102

* @lc app=leetcode id=48 lang=cpp
*
* [48] Rotate Image
*
* https://leetcode.com/problems/rotate-image/description/
*
* algorithms
* Medium (45.23%)
* Total Accepted: 204.8K
* Total Submissions: 452.8K
* Testcase Example: '[[1,2,3],[4,5,6],[7,8,9]]'
*
* 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, 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]
* ]
*
*
*/
class {
public:
void swap(int &a,int &b)
{
int t=a;
a=b;
b=t;
}
void rotate(vector<vector<int>>& matrix) {
int n=matrix[0].size();
/* for(int i=0;i<n/2;i++)
{
for(int j=i;j<n-1-i;j++)
{
int temp=matrix[j][n-i-1];
matrix[j][n-i-1]=matrix[i][j];
matrix[i][j]=matrix[n-j-1][i];
matrix[n-j-1][i] = matrix[n-i-1][n-j-1];
matrix[n-i-1][n-j-1] = temp;
}

}*/
for(int i=0;i<n;i++)//对角线对折
{
for(int j=i;j<n;j++)
{
swap(matrix[i][j],matrix[j][i]);
}
}//for

for(int i=0;i<n;i++)//对中线对折
{
for(int j=0;j<n/2;j++)
{
swap(matrix[i][j],matrix[i][n-1-j]);
}
}//for

}
};