题目描述
Given an integer n, generate a square matrix filled with elements from 1 to
n2
in spiral order.
For example, Given n = 3, You should return the following matrix:
[
[
1,
2,
3 ],
[
8,
9,
4 ],
[
7,
6,
5 ]
]
解题思路
和【LeetCode】54. Spiral Matrix 思路一样。只是此次需要一个全局的计数器,每次往矩阵中写入当前计数值并增加计数器即可。
AC代码
class Solution {
public:
vector<vector<int>> generateMatrix(
int n) {
vector<vector<int>> ans;
for (
int i =
0; i < n; ++i) {
vector<int> temp(n,
0);
ans.push_back(temp);
}
vector<vector<int>> dirs = {{
0,
1}, {
1,
0}, {
0, -
1}, {-
1,
0}};
int nSteps[
2] = {n, n -
1};
int curDir =
0;
int curRow =
0, curCol = -
1;
int totalCnt =
1;
int cnt =
0;
while (nSteps[curDir %
2]) {
curRow += dirs[curDir][
0];
curCol += dirs[curDir][
1];
ans[curRow][curCol] = totalCnt;
totalCnt++;
cnt++;
if (cnt == nSteps[curDir %
2]) {
cnt =
0;
nSteps[curDir %
2]--;
curDir = (curDir +
1) %
4;
}
}
return ans;
}
};
转载请注明原文地址: https://ju.6miu.com/read-13984.html