给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
解题思路:根据状态判断排序方向
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>v(n, vector<int>(n, 0));
vector<vector<int>>t(n, vector<int>(n, 0));
int kk = 1;
int i = 0, j = 0;
while (kk <= n*n) {
v[i][j] = kk;
t[i][j] = 1;
kk++;
//向右
if (j<n-1 &&((i == 0 && j<n-1) || (t[i - 1][j] == 1 && j<n - i &&t[i][j+1]==0)))j++;
//向下
else if (i<n-1&&((j == n - 1 && i<n - 1) || ((t[i - 1][j] == 1 && t[i][j + 1] == 1 && t[i + 1][j] == 0))))i++;
//向左
else if (j>0&&((i == n - 1 && j>0) || ((t[i][j + 1] == 1 && t[i + 1][j] == 1 && t[i][j - 1] == 0))))j--;
//向上
else i--;
}
return v;
}
};