leetcode_rotate_image

难度:Medium
解题思路:先对数组进行调换,找规律。

矩阵A

1 2 3
4 5 6
7 8 9

我们想要得到的结果是。

矩阵B

7 4 1
8 5 2
9 6 3

下面对初始矩阵进行转换。
先对每一行,进行前后翻转。

矩阵C

3 2 1
6 5 4
9 8 7

发现没什么规律。。
再对行与行之间,进行翻转。

矩阵D

7 8 9
4 5 6
1 2 3

这时可以发现,矩阵D与B关于一条对角线对称,对角线元素为7,5,3。这样我们就找到了解题思路。先行与行之间翻转,再对对角线翻转。
代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
auto first_level_first_it = matrix.begin();
auto first_level_second_it = matrix.end()-1;
while(first_level_first_it < first_level_second_it)
{
swap(*first_level_first_it, *first_level_second_it);
first_level_first_it++;
first_level_second_it--;
}
size_t sz = matrix.size();
for(int i = 0; i< sz; i++)
{
for(int j = i+1; j < sz; j++)
{
swap(matrix[i][j], matrix[j][i]);
}
}
}
};

代码结果:运行时间3ms,超过28.61%。