凌云的博客

行胜于言

LeetCode 算法题 59. 螺旋矩阵 II

分类:algorithm| 发布时间:2017-03-08 10:27:00


题目

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3
输出:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

解法

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> spiral(n, vector<int>(n));
        int u = 0, d = n - 1, l = 0, r = n - 1, k = 0;
        while (true) {
            // up
            for (int col = l; col <= r; col++) spiral[u][col] = ++k;
            if (++u > d) break;
            // right
            for (int row = u; row <= d; row++) spiral[row][r] = ++k;
            if (--r < l) break;
            // down
            for (int col = r; col >= l; col--) spiral[d][col] = ++k;
            if (--d < u) break;
            // left
            for (int row = d; row >= u; row--) spiral[row][l] = ++k;
            if (++l > r) break;
        }

        return spiral;
    }
};