Simple C++ Solution
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> graph(n, vector<int>(n, 0));
for(int i = 0; i < n; i++) graph[0][i] = i+1;
int row = 1, col = n-1;
int counter = n+1;
while(true)
{
//down
for(int i = row; i < n && graph[i][col] == 0; i++) {
graph[i][col] = counter;
counter++;
row++;
}
row--;
col--;
//left
for(int i = col; i >= 0 && graph[row][i] == 0; i--)
{
graph[row][i] = counter;
counter++; col--;
}
col++;
row--;
if(counter == n*n + 1) return graph;
//up
for(int i = row; i >= 0 && graph[i][col] == 0; i--)
{
graph[i][col] = counter;
counter++;
row--;
}
row++;
col++;
//right
for(int i = col; i < n && graph[row][i] == 0; i++)
{
graph[row][i] = counter;
counter++; col++;
}
col--;
row++;
if(counter == n*n + 1) return graph;
}
return graph;
}
};