给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。题目链接:. - 力扣(LeetCode)
逻辑较为复杂的情况下,写代码前要理清逻辑。
模拟顺时针画矩阵的过程:
- 填充上行从左到右
- 填充右列从上到下
- 填充下行从右到左
- 填充左列从下到上
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> mat(n, vector<int>(n));
int i = 0, j = 0, len = n, count = 0;
int num = 1;
for (len = n - 1;len > 0;len = len - 2) {
for (count = 0;count < len;count++) {
mat[i][j] = num++;
j++;
}
for (count = 0;count < len;count++) {
mat[i][j] = num++;
i++;
}
for (count = 0;count < len;count++) {
mat[i][j] = num++;
j--;
}
for (count = 0;count < len;count++) {
mat[i][j] = num++;
i--;
}
i++;
j++;
}
if (len == 0) {
mat[i][j] = num;
}
return mat;
}
};
要注意的是每次for循环结束,指向的元素都会多滑出去一位。还有n为奇数时要单独填充最中间的数。