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 ] ]
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
if (n == 0)
{
vector<vector<int>> ans;
return ans;
}
vector<vector <int> > matrix(n, vector<int>(n, 0));
int total = n*n;
int num = 0;
int left, right, top, buttom;
left = 0;
top = 0; //第 0 行
buttom = n;
right = n;
while (total > num)
{
for (int i = left; i < right; ++i)
{
num++;
matrix[top][i] = num;
if (total == num) return matrix;
}
top++;
for (int j = top; j < buttom; j++)
{
num++;
matrix[j][right - 1] = num;
if (num == total) return matrix;
}
right--;
for (int i = right - 1; i >= left; i--)
{
num++;
matrix[buttom - 1][i] = num;
if (num == total) return matrix;
}
buttom--;
for (int j = buttom - 1; j >= top; j--)
{
num++;
matrix[j][left] = num;
if (num == total) return matrix;
}
left++;
}
return matrix;
}
};