螺旋矩阵

blabla

给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例1:

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

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

示例2:

输入:matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];

输出:[1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7]

注意

1 <= m, n <= 10

-100 <= matrix[i][j] <= 100

class Solution {
public:
    vector<int> SpiralOrder(vector<vector<int>> &matrix)
    {
        vector<int> res;
        int m = matrix.size();
        int n = matrix[0].size();
        int up = 0;
        int down = m - 1;
        int left = 0;
        int right = n - 1;

        while (true) {
            // 从左往右
            for (int i = left; i <= right; i++) {
                res.emplace_back(matrix[up][i]);
            }
            
            if (++up > down) {
                break;
            }
            
            // 从上到下
            for (int i = up; i <= down; i++) {
                res.emplace_back(matrix[i][right]);
            }
            
            if (--right < left) {
                break;
            }

            // 从右到左
            for (int j = right; j >= left; j--) {
                res.emplace_back(matrix[j][left]);
            }
            
            if (--down < up) {
                break;
            }
            
            // 从下到上
            for (int j = down; j >= up; j--) {
                res.emplace_back(matrix[j][left]);
            }

            if (++left > right) {
                break;
            }
        }
        return res;
    }
};