题解 | #螺旋矩阵#

螺旋矩阵

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

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

全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
CrazyBucket:我今天下午也做梦在招聘会上面试一家小厂,给自己气笑了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务