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

顺时针打印矩阵

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

public:
    vector<int>ans;
    //每一圈当成一个矩阵,然后遍历该矩阵即可
    void fun(int lx,int ly,int rx,int ry,vector<vector<int> > matrix){
        for(int i=ly;i<=ry;i++)ans.push_back(matrix[lx][i]);
        for(int j=lx+1;j<=rx;j++)ans.push_back(matrix[j][ry]);
        int h=rx-lx+1;//这里易错
        if(h>1){//不止只有一行
            for(int i=ry-1;i>=ly;i--)ans.push_back(matrix[rx][i]);
        }
        int w=ry-ly+1;
        if(w>1){//不止只有一列
            for(int j=rx-1;j>=lx+1;j--)ans.push_back(matrix[j][ly]);
        }
    }
    vector<int> printMatrix(vector<vector<int> >  matrix) {
        
        if(matrix.empty())return ans;
        //这两个点分别表示左上角,和右下角的点
        int lx=0,ly=0,rx=matrix.size()-1,ry=matrix[0].size()-1;
        while(lx<=rx&&ly<=ry){//满足两点的位置
            fun(lx++,ly++,rx--,ry--,matrix);
        }
        return ans;
    }
};



全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务