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

顺时针打印矩阵

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

#include <vector>
class Solution {
    //注意:给的矩阵不一定是方阵!
  public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        //matrix.size()行数;matrix[0].size()列数
        int rows = matrix.size();
        int cols = matrix[0].size();
        vector<int> res;
        if (matrix[0].size() == 0  ) {
            return res;
        }
        if (matrix[0].size() == 1 && matrix.size() == 1) {
            res.push_back(matrix[0][0]);
            return res;
        }
        //flag:墙壁和记录路径
        //1 1 1 1 1     matrix
        //1 0 0 0 1     1 2 3
        //1 0 0 0 1     4 5 6
        //1 0 0 0 1     7 8 9
        //1 1 1 1 1
        vector<vector<bool>>flag(rows + 2, vector<bool>(cols + 2, true));
        for (int i = 1; i <= rows; i++) {
            for (int j = 1; j <= cols; j++) {
                flag[i][j] = false;
            }
        }

        int row = 0;
        int col = 0;

        while (true) {

            //right
            while (true) {
                if (flag[row + 1][col + 1] == false)   res.push_back(matrix[row][col]);
                flag[row + 1][col + 1] = true;
                //check right side
                if (flag[row + 1][col + 2] == true) break;
                col++;
            }

            //down
            while (true) {
                if (flag[row + 1][col + 1] == false)   res.push_back(matrix[row][col]);
                flag[row + 1][col + 1] = true;
                //check down side
                if (flag[row + 2][col + 1] == true)   break;
                row++;
            }

            //left
            while (true) {
                if (flag[row + 1][col + 1] == false)   res.push_back(matrix[row][col]);
                flag[row + 1][col + 1] = true;
                //check left side
                if (flag[row + 1][col] == true)   break;
                col--;
            }

            //up
            while (true) {
                if (flag[row + 1][col + 1] == false)   res.push_back(matrix[row][col]);
                flag[row + 1][col + 1] = true;
                //check up side
                if (flag[row][col + 1] == true)   break;
                row--;
            }

            //end 如果四周都走过了,就结束
            if (flag[row + 2][col + 1] && flag[row + 1][col + 2] &&
                    flag[row ][col + 1] && flag[row + 1][col]) {
                if (flag[row + 1][col + 1] == false)   res.push_back(matrix[row][col]);
                flag[row + 1][col + 1] = true;
                break;
            }
        }


        return res;

    }
};

全部评论

相关推荐

07-22 11:35
门头沟学院 Java
谁知道这是为什么吗,有没有懂的佬给讲讲
理智的小饼干又熬夜了:鹅打电话问我参不参加后台提前批,说是有的但还没放官网
点赞 评论 收藏
分享
06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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