class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res = vector<vector<int>>(n, vector<int>(n));
int m = 1;
int i = 0, j = 0;
int left = 0, right = n, up = 1, down = n;
int num = n * n;
while (m <= num) {
while (j < right) {
res[i][j] = m;
j++;
m++;
}
if (m > num) return res;
right--;
j--;
i++;
while (i < down) {
res[i][j] = m;
i++;
m++;
}
if (m > num) return res;
down--;
i--;
j--;
while (j >= left) {
res[i][j] = m;
j--;
m++;
}
if (m > num) return res;
left++;
j++;
i--;
while (i >= up) {
res[i][j] = m;
i--;
m++;
}
if (m > num) return res;
up++;
i++;
j++;
}
return res;
}
};