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 ]]
方向变化与Spiral Matrix一致。将二维数组初始化全为-1,更新后值大于0;
利用值是否为-1判断该值是否已加入到二维数组中;
按变化方向一个一个元素加入到二维数组中,一直到n*n个元素停止;
class Solution { public: vector< vector<int> > generateMatrix(int n) { vector< vector<int> > matrix1; if(n == 0) return matrix1; vector< vector<int> > matrix(n, vector<int> (n,-1)); int count = 1; int x = 0; int y = 0; int direct = 0;//0-> 1xia,2 zuo,3 shang while(count != n*n+1) { if(matrix[x][y] == -1 && direct == 0) { matrix[x][y] = count++; y++; if(y == n || matrix[x][y] != -1) { x++; y--; direct = 1; continue; } } if(matrix[x][y] == -1 && direct == 1) { matrix[x][y] = count++; x++; if(x == n || matrix[x][y] != -1) { x--; y--; direct = 2; continue; } } if(matrix[x][y] == -1 && direct == 2) { matrix[x][y] = count++; y--; if(y == -1 || matrix[x][y] != -1) { y++; x--; direct = 3; continue; } } if(matrix[x][y] == -1 && direct == 3) { matrix[x][y] = count++; x--; if(x == -1 || matrix[x][y] != -1) { x++; y++; direct = 0; continue; } } } return matrix; } };