题解 | 顺时针打印矩阵

顺时针打印矩阵

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

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {

        int left = 0;
        int right = matrix[0].size() - 1;
        int up = 0;
        int down = matrix.size() - 1;
        vector<int> res;
        while(left <= right && up <= down){
            for(int i = left; i <= right; i ++){
                res.push_back(matrix[up][i]);
            }
            for(int i = up + 1; i <= down; i++){
                res.push_back(matrix[i][right]);
            }
            for(int i = right - 1; i >= left && up < down; i --){
                res.push_back(matrix[down][i]);
            }
            for(int i = down - 1; i > up && left < right; i --){
                res.push_back(matrix[i][left]);
            }
            left++;
            right--;
            up++;
            down--;
        }
        return res;
    }
};

全部评论
关键点在于 1.终止条件为四个点相遇,因此只有left<=right 和up<=down 都满足时才终止,使用&& 2.由于每一圈都会将变量改变,所以可能存在一对数是负数,自增时还需要判断是否满足条件 3.使用每一步都走到头的策略 4.后两个必须判断不修改的坐标是否满足合法要求,不然直接越界或者重复了
点赞 回复 分享
发布于 2025-04-02 11:41 上海

相关推荐

评论
点赞
收藏
分享

创作者周榜

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