这道题目通过由外向内,一层一层的对矩阵进行填充,每一行或一列的填充,都是左闭右开的进行,这样就不会导致循环的边界出现太多的错误,代码如下:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix(n,vector(n,0));
int startx = 0;
int starty = 0;
int edge = 1;
int count = 1;
int mid = n / 2;
int i,j;
int loop = n / 2;
while(loop--){
i = startx;
j = starty;
for(j; j < n - edge; j++){
matrix[i][j] = count++;
}
for(i; i < n - edge; i++){
matrix[i][j] = count++;
}
for(j; j > starty; j--){
matrix[i][j] = count++;
}
for(i; i > startx; i--){
matrix[i][j] = count++;
}
startx++;
starty++;
edge++;
}
if(n % 2){
matrix[mid][mid] = count;
}
return matrix;
}
};