给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
设定上下左右边界,然后每次顺时针往数组里面填入数字,填完一行或者一列之后更新边界的大小。循环结束的条件是所有的数字是否打印完毕。
代码:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int l = 0, r = n - 1, t = 0, b = n - 1;
vector<vector<int>>ans(n, vector<int>(n, 0));
int num = 1, tar = n * n;
while (num <= tar)
{
for (int i = l; i <= r; i++)
{
ans[t][i] = num++;
cout << "ans[" << t << "]" << "[" << i << "]=" << ans[t][i] << " ";
}
t++;
for (int i = t; i <= b; i++) ans[i][r] = num++;
r--;
for (int i = r; i >= l; i--) ans[b][i] = num++;
b--;
for (int i = b; i >= t; i--) ans[i][l] = num++;
l++;
}
//cout << ans[0][1];
return ans;
}
};