Rotate Image
You are given an
n x
n 2D matrix representing an image.
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
Rotate the image by 90 degrees (clockwise).
Note:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOTallocate another 2D matrix and do the rotation.
Example 1:
Given input matrix = [ [1,2,3], [4,5,6], [7,8,9] ], rotate the input matrix in-place such that it becomes: [ [7,4,1], [8,5,2], [9,6,3] ]
Example 2:
Given input matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], rotate the input matrix in-place such that it becomes: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ]
顺时针旋转90度时,可以把旋转90度所对应的三角形补充为等边三角形,按边旋转,如图
code
#include <iostream> #include <vector> #include <algorithm> using namespace std; class Solution { public: void rotate(vector<vector<int>>& matrix) { if(matrix.empty()) return ; tranpose(matrix); reflect(matrix); return ; } private: void tranpose(vector<vector<int>> &matrix) { for(int i=0;i<matrix.size();++i) { for(int j=0;j<i;++j) swap(matrix.at(i).at(j),matrix.at(j).at(i)); } return ; } void reflect(vector<vector<int>> &matrix) { for(int row=0;row<matrix.size();++row) { for(int i=0,j=matrix.at(row).size()-1;i<j;++i,--j) swap(matrix.at(row).at(i),matrix.at(row).at(j)); } return ; } }; int main() { vector<vector<int>> arr{{1,2,3},{4,5,6},{7,8,9}}; Solution s; s.rotate(arr); for(auto i:arr) { for(auto j:i) cout<<j<<" "; cout<<endl; } return 0; }

更多精彩