1 class Solution { 2 public: 3 vector<vector<int> > generateMatrix(int n) { 4 if (n == 0) return vector<vector<int> >(); 5 vector<vector<int> > res(n, vector<int>(n)); 6 int imin = 0, imax = n-1, jmin = 0, jmax = n-1; 7 int number = 1; 8 while (true) { 9 for (int j = jmin; j <= jmax; ++j) 10 res[imin][j] = number++; 11 if (++imin > imax) break; 12 for (int i = imin; i <= imax; ++i) 13 res[i][jmax] = number++; 14 if (jmin > --jmax) break; 15 for (int j = jmax; j >= jmin; --j) 16 res[imax][j] = number++; 17 if (imin > --imax) break; 18 for (int i = imax; i >= imin; --i) 19 res[i][jmin] = number++; 20 if (++jmin > jmax) break; 21 } 22 return res; 23 } 24 };
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]