Spurs

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Follow up:
Could you do this in-place?

方阵顺时针旋转90度,方法:

  1. 按行reverse
  2. 交换元素 A[i, j] = A[j, i]

逆时针90度方法:

  1. 按列reverse
for (auto vi : matrix) reverse(vi.begin(), vi.end());
  1. 交换元素 A[i, j] = A[j, i]

代码们:

// clockwise rotate
// 1. 按行reverse  2. 交换元素 A[i, j] = A[j, i]
/*
 * 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>>& A) {
	const int n = A.size();
	reverse(A.begin(), A.end());

	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			swap(A[i][j], A[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>>& A) {
	const int n = A.size();
	for(atuo vi : A) reverse(vi.begin(), vi.end());

	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			swap(A[i][j], A[j][i]);
		}
	}
}
posted on 2017-08-24 12:58  英雄与侠义的化身  阅读(92)  评论(0编辑  收藏  举报