Problem:
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 ] ]
Analysis:
Solutions:
C++:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int> > matrix(n, vector<int>(n, 0));
if(n == 0)
return matrix;
int search_bound = n / 2;
int next_number = 1;
for(int start = 0; start < search_bound; ++start) {
for(int index = start; index < n - 1 - start; ++index)
matrix[start][index] = next_number++;
for(int index = start; index < n - 1 - start; ++index)
matrix[index][n - 1 - start] = next_number++;
for(int index = n - 1 - start; index > start; --index)
matrix[n - 1 - start][index] = next_number++;
for(int index = n - 1 - start; index > start; --index)
matrix[index][start] = next_number++;
}
if(n % 2 == 1)
matrix[search_bound][search_bound] = next_number;
return matrix;
}
Java
:
Python: