题目:
leetcode第59题--螺旋矩阵II
要求:
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
思路:
分析本题,其实本题与54题几乎一样,可以将过程分为4个过程,分别为向右、向下、向左、向上。碰到边界或者已经走过的行或列改变方向,一直重复这个过程直到走完全部。
程序:
vector<vector<int>> generateMatrix(int n) {
//创建一个空的二维向量
vector<vector<int>> res;
int max = n*n;
for(int i = 0;i < n;i++){
vector<int> tmp;
for(int j = 0;j < n;j++){
tmp.push_back(0);
}
res.push_back(tmp);
}
//使用变量step代表行走的步数,stage代表行走的方向,其中stage为0、1、2、3分别代表向右、下、左、上
int step = 1,stage=0;
int i = 0,j = 0;
while(step < max+1){
// std::cout<<stage<<std::endl;
res[i][j] = step;
step += 1;
switch (stage){
case 0:{
j++;
if(j==n||(res[i][j]!=0)){
--j;
++i;
stage = 1;
}
break;
}
case 1:{
i++;
if(i==n||(res[i][j]!=0)){
--i;
--j;
stage = 2;
}
break;
}
case 2:{
j--;
if(j<0||(res[i][j]!=0)){
++j;
--i;
stage = 3;
}
break;
}
case 3:{
i--;
if(j==n||(res[i][j]!=0)){
++j;
++i;
stage = 0;
}
break;
}
}
}
return res;
}
结果:
最终运行结果为4ms