力扣算法笔记--3--旋转图像(数组)
·旋转图像
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
示例:
分析:
借助另一个数组,将原始矩阵的元素全部存放到数组中,每一列自下而上,每一行自左向右,依次存放到数组中,之后再将数组中的元组按照赋值到原矩阵中,原则:
for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ matrix[i][j]=ret[i*n+j];//依次重新赋值到矩阵中,从而实现旋转 } }
如图:
运行截图:
·代码
#include<vector> #include<iostream> using namespace std; vector <vector <int> > v; vector <int> v1; void rotate(vector<vector <int> >& matrix); void show(vector <vector<int> > matrix); int main(){ for(int i=1;i<4;i++){ v1.push_back(i); } for(int i=1;i<4;i++){ v.push_back(v1); } show(v); rotate(v); cout<<"after turned:"<<endl; show(v); } void show(vector <vector<int> > matrix){ for(int i=0;i<3;i++){ for(int j=0;j<3;j++) cout<<v[i][j]<<" "; cout<<endl; } } void rotate(vector<vector <int> >& matrix){ int n=matrix.size(); vector <int> ret; for(int j=0;j<n;j++){ for(int i=n-1;i>=0;i--){ ret.push_back(matrix[i][j]); } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ matrix[i][j]=ret[i*n+j]; } } }