题目
Number: 48
Difficulty: Medium
Tags: Array
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
题解
顺时针旋转矩阵90度。
首先按行反转,然后对角线交换。
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
如果要逆时针旋转90度。
首先按列反转,然后对角线交换。
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
代码
顺时针90度:
void rotate(vector<vector<int>>& matrix) {
reverse(matrix.begin(), matrix.end());
for(int i = 0; i < matrix.size(); ++i)
for(int j = 0; j < i; ++ j)
swap(matrix[i][j], matrix[j][i]);
}
逆时针90度:
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 = 0; j < i; ++j)
swap(matrix[i][j], matrix[j][i]);
}