解法与LeetCode #54 螺旋矩阵类似,记录上下左右边界的位置。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n, vector<int>(n, 0));
int up = 0;
int down = n - 1;
int left = 0;
int right = n - 1;
int num = 1;
while (true) {
// 从左到右
for (int i = left; i <= right; i++) {
res[up][i] = num++;
}
if (++up > down) {
break;
}
// 从上到下
for (int i = up; i <= down; i++) {
res[i][right] = num++;
}
if (--right < left) {
break;
}
// 从右到左
for (int i = right; i >= left; i--) {
res[down][i] = num++;
}
if (--down < up) {
break;
}
// 从下到上
for (int i = down; i >= up; i--) {
res[i][left] = num++;
}
if (++left > right) {
break;
}
}
return res;
}
};