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?
C++实现代码:
#include<iostream> #include<vector> using namespace std; class Solution { public: void rotate(vector<vector<int> > &matrix) { if(matrix.empty()) return; vector<vector<int> > temp=matrix; int i,j; int n=matrix.size(); for(i=0;i<n;i++) { for(j=0;j<n;j++) { matrix[j][n-i-1]=temp[i][j]; } } } }; int main() { Solution s; vector<vector<int> > vec={{1,2,3},{4,5,6},{7,8,9}}; s.rotate(vec); for(auto a:vec) { for(auto v:a) cout<<v<<" "; cout<<endl; } }
第二遍刷题,就地的方法。
例如,顺时针旋转,可以先将矩阵的上下分别交换,然后沿主对角线进行交换。
class Solution { public: void rotate(vector<vector<int> > &matrix) { if(matrix.empty()||matrix[0].empty()) return; int n=matrix.size(); for(int i=0;i<n/2;++i) for(int j=0;j<n;++j) swap(&matrix[i][j],&matrix[n-1-i][j]); for(int i=0;i<n;++i) for(int j=0;j<i;++j) swap(&matrix[i][j],&matrix[j][i]); } void swap(int *a,int *b) { int tmp=*a; *a=*b; *b=tmp; } };