题解 | #螺旋矩阵#

螺旋矩阵

https://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31

#include <vector>
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
        int m = matrix.size();
        if (m == 0) {
            return {};
        }
        int n = matrix[0].size();
        if (n == 0) {
            return {};
        }
        vector<int> res;
        res.reserve(m * n);
        int ub = 0, db = m - 1, lb = 0, rb = n - 1;
        while (res.size() < m * n) {
            if (ub <= db) {
                for (int j = lb; j <= rb; ++j) {
                    res.push_back(matrix[ub][j]);
                }
                ++ub;
            }
            if (rb >= lb) {
                for (int i = ub; i <= db; ++i) {
                    res.push_back(matrix[i][rb]);
                }
                --rb;
            }
            if (db >= ub) {
                for (int j = rb; j >= lb; --j) {
                    res.push_back(matrix[db][j]);
                }
                --db;
            }
            if (lb <= rb) {
                for (int i = db; i >= ub; --i) {
                    res.push_back(matrix[i][lb]);
                }
                ++lb;
            }
        }
        return res;
    }
};

思路:维护四个边界,每次循环打印一圈边界上的值。

全部评论

相关推荐

这算盘打的
程序员小白条:都这样的,都是潜规则,你自己说可以实习一年就行了,实习可以随便跑路的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 17:10
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务