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

顺时针打印矩阵

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

// 定好上下左右边界值,模仿绕圈圈,注意更新边界值
// 记得上左到上右,搞完更新的是上值
// while时候注意要带等号,对于行列数目不等时,需要等号
// 思路比较直接,画个圈圈感受一下就行了
class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        int up, down, left, right;
        up = 0;
        down = matrix.size() - 1;
        left = 0;
        right = matrix[0].size()-1;
        vector<int> res;
        if(right < 0) return res;
        while (left <= right && up <= down) {   // 对于行为3,列为5,这时候需要 = 了
            // 从上左到上右
            for(int i = left; i <= right; ++i)
            {
                res.push_back(matrix[left][i]);
            }
            up++;
            if(up > down) break;

            // 从右上到右下
            for(int i = up; i <= down; ++i)
            {
                res.push_back(matrix[i][right]);
            }
            right--;
            if(left > right) break;

            // 从下右到下左
            for(int i = right; i >= left; --i)
            {
                res.push_back(matrix[down][i]);
            }
            down--;
            if(up > down) break;
            // 从左下到左上
            for(int i = down; i >= up; --i)
            {
                res.push_back(matrix[i][left]);
            }
            left++;
            if(left > right) break;
            //std::cout << left << " " << right << " " << up << " " << down << endl;
        }
        return res;
    }
};

挤挤刷刷! 文章被收录于专栏

记录coding过程

全部评论

相关推荐

01-21 12:26
暨南大学 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务