C++
首先定义出每个上下左右边界值 然后找到规律即可

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
        if(matrix.size()==0){
            return {};
        }
        //定义边界 上下左右
        int left = 0,right = matrix[0].size()-1,top = 0,bottom = matrix.size()-1;
        //结果数组
        vector<int> res(matrix[0].size()*matrix.size());
        int x = 0;
        while(true){
            //从左到右
            for(int i=left;i<=right;i++){
                res[x++] = matrix[top][i];
            }
            //第一层遍历完成后 top向下一层
            //判断边界条件
            if(++top>bottom) break;

            //从上到下
            for(int i=top;i<=bottom;i++){
                res[x++] = matrix[i][right];
            }

            //最右边遍历完成后,right向左一层
            //判断边界条件
            if(--right<left) break;

            //从右到左
            for(int i=right;i>=left;i--){
                res[x++] = matrix[bottom][i];
            }

            //最下边遍历完成后,bottom向上一层
            //判断边界条件
            if(--bottom<top) break;

            //从下到上
            for(int i=bottom;i>=top;i--){
                res[x++] = matrix[i][left];
            }

            //最左边遍历完成后,left向右一层
            //判断边界条件
            if(++left>right) break;
        }
        return res;
    }
};