首页 > 代码库 > [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一题严格的数组逻辑操作问题,考虑认真就好,思路:
1 | 2 | 3 | 1 |
3 | 4 | 4 | 2 |
2 | 4 | 4 | 3 |
1 | 3 | 2 | 1 |
我写的代码用了长度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 }
[LeetCode] Rotate Image
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。