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;
    }
};
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐