首页 > 代码库 > [LeetCode] Rotate Image

[LeetCode] 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?

 

Hide Tags
 Array
 
  一题严格的数组逻辑操作问题,考虑认真就好,思路:
 
 
1231
3442
2443
1321
如上表,一共有两圈,对于n 来说,圈数为(n+1)/2,从外圈到内圈,转换了一圈后到下一圈。
 
我写的代码用了长度len ,其实写j=i 会方便很多。
需要计算好下标,有个简单的确认,一次转换中的4个数,不相邻的两个数的对应下标和为定值(n-1),例如一个是<i,j>,另一个就是<n-1  -i,n-1  -j>,利用这个规律其实只要确认两个就行。
代码如下:
 1 #include <iostream> 2 #include <vector> 3 #include <iterator> 4 using namespace std; 5  6 class Solution { 7 public: 8     void rotate(vector<vector<int> > &matrix) { 9         int n =matrix.size();10         if(n<2) return ;11         for(int i=0;i<(n+1)/2;i++){12             for(int len=0;len<=n-2*(i+1);len++){13                 int temp = matrix[i][i+len];14                 matrix[i][i+len] = matrix[n-1-i-len][i];15                 matrix[n-1-i-len][i] = matrix[n-1-i][n-1-i-len];16                 matrix[n-1-i][n-1-i-len] = matrix[i+len][n-i-1];17                 matrix[i+len][n-i-1] = temp;18             }19         }20     }21 };22 23 int main()24 {25     vector<vector<int> > matrix;26     vector<int> tempm;27     int cnt =1;28     for(int i=1;i<9;i++){29         for(int j=1;j<9;j++)30             tempm.push_back(cnt++);31         matrix.push_back(tempm);32         tempm.clear();33     }34     Solution sol;35     sol.rotate(matrix);36     for(int i=0;i<matrix.size();i++){37         copy(matrix[i].begin(),matrix[i].end(),ostream_iterator<int>(cout," "));38         cout<<endl;39     }40 41     return 0;42 }
View Code

 

 

[LeetCode] Rotate Image