题解 | #螺旋矩阵#

螺旋矩阵

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

定义上下左右四个边界即可,注意条件有row和col等于0的情况,需要特判

public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
        vector<int> ans;
        int col=matrix.size();
        int row=matrix[0].size();
        if(col==0 || row==0)
            return {};
        //定义上下左右四个边界
        int u=0;
        int d=col-1;
        int l=0;
        int r=row-1;
        while(true)
        {
            //顺序一定是右下左上
            //向右边
            for(int i=l; i<=r; i++)
                ans.push_back(matrix[u][i]);
            //重新定义上边界
            if(++u>d)   break;
            
            //向下
            for(int i=u; i<=d; i++)
                ans.push_back(matrix[i][r]);
            //定义右边界
            if(--r<l)   break;
            
            for(int i=r; i>=l; i--)
                ans.push_back(matrix[d][i]);;
            if(--d<u)   break;

            for(int i=d; i>=u; i--)
                ans.push_back(matrix[i][l]);
            if(++l>r)   break;
        }
        return ans;
    }
};
全部评论

相关推荐

AAA专业长城贴瓷砖刘大爷:这样的简历我会直接丢进垃圾桶,花里胡哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务