• 54. Spiral Matrix (Graph)


    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

    For example,
    Given the following matrix:

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

    You should return [1,2,3,6,9,8,7,4,5].

    思路:创建函数互相递归调用,函数的参数要包括方向

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>> &matrix) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            result.clear();
            if(matrix.empty()) return result;
            
            leftPos = 0; 
            rightPos = matrix[0].size()-1; 
            topPos = 0; 
            bottomPos = matrix.size()-1;
            goWider(matrix, true);
            return result;
        }
        void goWider(vector<vector<int>> &matrix, bool direct)
        {
            if(direct)
            {
                for(int i = leftPos; i<= rightPos; i++)
                {
                    result.push_back(matrix[topPos][i]);
                }
                topPos++;
                if(topPos > bottomPos) return;
                goDeeper(matrix, true);
            }
            else
            {
                for(int i = rightPos; i>= leftPos; i--)
                {
                    result.push_back(matrix[bottomPos][i]);
                }
                bottomPos--;
                if(topPos > bottomPos) return;
                goDeeper(matrix, false);
            }
        }
        void goDeeper(vector<vector<int>> &matrix, bool direct)
        {
            if(direct)
            {
                for(int i = topPos; i<= bottomPos; i++)
                {
                    result.push_back(matrix[i][rightPos]);
                }
                rightPos--;
                if(leftPos > rightPos) return;
                goWider(matrix, false);
            }
            else
            {
                for(int i = bottomPos; i>= topPos; i--)
                {
                    result.push_back(matrix[i][leftPos]);
                }
                leftPos++;
                if(leftPos > rightPos) return;
                goWider(matrix, true);
            }
        }
    private:
        vector<int> result;
        int leftPos;
        int rightPos;
        int topPos;
        int bottomPos;
    };
  • 相关阅读:
    [转载-声网]18个实时音视频开发中会用到开源项目
    linux shell命令之wc/split及特殊字符
    RTP推流及验证
    Ubuntu18.04提示wifi无法连接
    ubuntu上Android开发环境及依赖项
    HLS playlist典型示例
    ffmpeg-hls实现分析
    AOSP中的HLS协议解析
    使用ffmpeg搭建HLS直播系统
    流媒体之HLS——综述(二)
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4854641.html
Copyright © 2020-2023  润新知