和螺旋矩阵I一样,我们都是用模拟来解决,唯一的不同为我们需要解决数字在数组中的排序,只需要定义一个初始数,然后在模拟的时候逐步加一,就可以得到最后的结果。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n,vector<int>(n,0));
int loop = n / 2;//需要模拟的次数
int startx = 0,starty = 0;//坐标的起始位置
int mid = n / 2;
int count = 1;
int offset = 1;//遍历的层数,每加一层,数字加一
int i,j;
while(loop--){
i = startx;
j = starty;
for(j = starty;j < n - offset;j++){//上层向右遍历
res[startx][j] = count++;
}
for(i = startx;i < n - offset;i++){//右部向下遍历
res[i][j] = count++;
}
for(;j > starty;j--){//向左遍历
res[i][j] = count++;
}
for(;i > startx;i--){//向上遍历
res[i][j] = count++;
}
startx++;
starty++;
offset++;
}
if(n % 2 != 0){//如果不为偶数,需要自己赋予一个数组中间位置的值
res[mid][mid] = count;
}
return res;
}
};