题解 | #顺时针打印矩阵#

顺时针打印矩阵

http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a

二维数组中的变量

这道题目的难点在于确定循环出口,而确定循环出口又需要边界变量的配合,所以问题最后还是得归结到边界变量得设置上。

计数变量何时增减?

一开始想的是输出一行或者一列的元素之后就改变边界元素的值,但是明显有误。

设计几个变量?

一开始打算设计两个变量boundup、bounddown分别输出右上边框和左下边框,但是确认左右边界太麻烦了。

一个可行的思路

设计四个计数变量分别表示上、下、左、右四个边界,这样在遍历的时候确认边界就很简单了;与此同时,在遍历数组一圈之后再进行变量的集体增减来改变边界才正确。

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int> array;
       array.reserve(10000);
        int row = matrix.size();
        int col = matrix[0].size();
//         int boundup=0,bounddown=col;
        
        int r0=0,c0=0,r1=row-1,c1=col-1;
        while(r1>=r0 && c1>=c0){
            //上一行
            for(int i=c0;i<=c1;i++) array.push_back(matrix[r0][i]);
            //右一列
            for(int i=r0+1;i<=r1;i++) array.push_back(matrix[i][c1]);
            //下一行
            if(r0!=r1){
                for(int i=c1-1;i>=c0;i--) array.push_back(matrix[r1][i]);
            }
            //左一列
            if(c0!=c1){
                for(int i=r1-1;i>r0;i--) array.push_back(matrix[i][c0]);
            }
            r0++;r1--;
            c0++;c1--;
        }
        return array;
        /*do{
            while(i<bounddown-1){
                if(i==boundup){//遍历matrix[0]
                    for(auto m=matrix[boundup].begin();m<matrix[boundup].end();m++){
                        array.push_back(*m);
                        boundup++;
                        col--;
                    }
                }
                else array.push_back(matrix[i][col-1])
                i++;
            }
            while(i>boundup){
                if(i==bounddown){//遍历m
                    for
                }
                

            }
        }while(boudup!=bounddown)*/

    }
};
全部评论

相关推荐

11-08 16:53
门头沟学院 C++
投票
滑模小马达:第三个如果是qfqc感觉还行,我签的qfkj搞电机的,违约金也很高,但公司感觉还可以,听说之前开过一个试用转正的应届生,仅供参考。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务