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

顺时针打印矩阵

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

注意边界情况,如果始终保持左闭右开会造成奇数行列时(四个for循环互相推诿)漏掉。故采用以下方法

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        if(matrix.size()<1) return vector<int>();
        if(matrix.size()==1) return matrix[0];
        int down=matrix.size()-1;
        int right=matrix[0].size()-1;
        int up=0,left=0;
        vector<int> ans;
        while(left<=right&&up<=down){
            for(int i=left;i<=right;i++){
                ans.push_back(matrix[up][i]);
            }
            for(int i=up+1;i<=down;i++){
                ans.push_back(matrix[i][right]);
            }
            for(int i=right-1;i>=left&&up!=down;i--){//不加&&up!=down就会在奇数行造成回文效果
                ans.push_back(matrix[down][i]);
            }
            for(int i=down-1;i>up&&left!=right;i--){
                ans.push_back(matrix[i][left]);
            }
            left++,right--,up++,down--;
        }
        return ans;
    }
};
全部评论

相关推荐

鱼专:别投了,我看到有人点了第二个链接投递,还没退出界面,不合适的邮件就发过来了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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