Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
vector<vector<int> > Array(n, vector<int>(n, 0));
if (n <= 0)
return Array;
setNum(Array, 0, n - 1, 1);
return Array;
}
void setNum(vector<vector<int> > &Array, int left, int right, int index) {
if (left > right)
return;
if (left == right) {
Array[left][left] = index;
return;
}
for (int j = left; j <= right; ++j) {
Array[left][j] = index++;
}
for (int i = left + 1; i <= right; ++i) {
Array[i][right] = index++;
}
for (int j = right - 1; j >= left; --j) {
Array[right][j] = index++;
}
for (int i = right - 1; i > left; --i) {
Array[i][left] = index++;
}
setNum(Array, left + 1, right - 1, index);
}
};