题目和上一题矩阵旋转读取思路没有一点差异,所以直接贴出代码,并附上注释。
vector<vector<int> > generateMatrix(int n)
{
/*matrix 为输入矩阵*/
vector<vector<int>> result(n,vector<int>(n));//结果
if(!n) return result;//检测是否为空
int row=n;//行
int col=n;//列
vector<vector<int>> direction={{0,1},{1,0},{0,-1},{-1,0}};//存方向的数组
int select[2]={col,row-1};//select[0]表示水平移动次数
int cur[2]={0,-1};//当前移动点的坐标
int dir=0;//当前方向0代表向右,1代表向下,2代表向左,3代表向上
int k=1;
while(select[dir%2])
{
int steps=select[dir%2];
for(int i=0;i<steps;i++)//在dir方向移动的次数
{
cur[0]+=direction[dir][0];
cur[1]+=direction[dir][1];
result[cur[0]][cur[1]]=k++;
}
select[dir%2]--;//根据规律水平或者竖直方向减一
dir=(dir+1)%4;//按照顺序变换方向
}
return result;
}