LeetCode Rotate Image旋转图像

2014-11-24 03:12:36 · 作者: · 浏览: 0

Rotate Image

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 原矩阵计算出各个数值在新矩阵中的位置,然后一步到位转换成新的旋转矩阵

2 原矩阵到转置矩阵是很容易计算的,那么从转置矩阵到选择矩阵就只需要reverse每行的元素就可。

个人觉得还是第二种方法更为清晰一点。

思路一程序:< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+s/a0pqO6aHR0cDovL2Rpc2N1c3MubGVldGNvZGUuY29tL3F1ZXN0aW9ucy8yMjYvcm90YXRlLWltYWdlPC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">void rotate(vector > &matrix) { int n = matrix.size(); for(int i = 0; i < n/2; ++i) for(int j = i; j < n-1-i; ++j){ int t = matrix[i][j]; matrix[i][j] = matrix[n-1-j][i]; matrix[n-1-j][i] = matrix[n-1-i][n-1-j]; matrix[n-1-i][n-1-j] = matrix[j][n-1-i]; matrix[j][n-1-i] = t; } }


思路二程序:

void rotate(vector
  
    > &matrix) {
		for(int i=0,n=matrix.size();i