class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix;
if(n <= 0)
return matrix;
matrix.resize(n);
for (int i = 0; i < n; i++)
{
matrix[i].resize(n);
}
int rowBegin = 0;
int rowEnd = n - 1;
int colBegin = 0;
int colEnd = n-1;
int cnt = 1;
while (rowBegin <= rowEnd && colBegin <= colEnd)
{
for (int i = colBegin; i <= colEnd ; i++) //traverse right
{
matrix[rowBegin][i] = cnt;
cnt++;
}
rowBegin++;
for (int i = rowBegin; i <= rowEnd; i++) // traverse down
{
matrix[i][colEnd] = cnt;
cnt++;
}
colEnd--;
if (rowBegin <= rowEnd)
{
for (int i = colEnd; i >= colBegin; i--) //traverse left
{
matrix[rowEnd][i] = cnt;
cnt++;
}
}
rowEnd--;
if (colBegin <= colEnd) //traverse up
{
for (int i = rowEnd; i >= rowBegin; i--)
{
matrix[i][colBegin] = cnt;
cnt++;
}
}
colBegin++;
}
return matrix;
}
};