leetcode: 59. Spiral Matrix II
·
leetcode: 59. Spiral Matrix II
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ans(n, vector<int>(n, 0)); // 定义一个二维数组,存答案
int count = 1; // 要填的数字
int mid = n / 2; // 当n为奇数时,矩阵中间的位置,要单独处理
int loop = n / 2; // 要画的圈数
int startX = 0, startY = 0; // 每一圈的起点坐标
int offset = 1; // 用来控制每一圈的边长
int i, j;
while (loop--) {
i = startX;
j = startY;
// 下面四个for循环就是模拟转了一圈(全部遵循左闭右开的画法)
while (j < n - offset) ans[startX][j++] = count++; // 从左到右
while (i < n - offset) ans[i++][j] = count++; // 从上到下
while (j > startY) ans[i][j--] = count++;// 从右到左
while (i > startX) ans[i--][j] = count++;// 从下到上
startX++;
startY++;
offset++;
}
if (n % 2 == 1) ans[mid][mid] = count;
return ans;
}
};
更多推荐
所有评论(0)