剑指Offer-顺时针打印

题解

/ 顺时针打印2D数组
        vector<int> printMatrix(vector<vector<int> > matrix) {
            // 初始化:给定一个矩阵matrix
            // 定义print_right, print_down, print_left, print_up四个方法
            // 从外向内,依次按照顺时针打印,直到层(lower(n/2)+1)打印完毕
            // 用左上角和右下角的坐标唯一确定一个矩阵
            vector<int> ret;
            if (matrix.empty()) return ret;  // 养成好习惯,开头判断输入
            int lx = 0, ly = 0;
            int rx = matrix.size()-1, ry = matrix[0].size() -1;
            while(lx<=rx && ly <= ry){
                print(lx++, ly++, rx--, ry--, matrix, ret);
            }

            return ret;
        }

        void print(int lx, int ly, int rx, int ry, vector<vector<int>> &matrix, vector<int> &ret){
            // print_right
            for (int j=ly; j<=ry;++j) ret.push_back(matrix[lx][j]);
            // print_down
            for (int i = lx+1;i<=rx;++i) ret.push_back(matrix[i][ry]);
            int h = rx-lx+1;
            if (h>1){  // 只有一行,不需要这一步
                // print_left
                for(int rj = ry-1;rj>=ly;--rj) ret.push_back(matrix[rx][rj]);
            }
            int w = ry - ly +1;
            if (w>1){  // 只有1列不需要这一步
                for (int ri=rx-1;ri>=lx+1;--ri) ret.push_back(matrix[ri][ly]);
            }
        }

难点

  1. 使用两点坐标来确定矩形
  2. 边界条件的控制
全部评论

相关推荐

06-27 12:30
延安大学 C++
实习+外包,这两个公司底层融为一体了,如何评价呢?
一表renzha:之前面了一家外包的大模型,基本上都能答出来,那面试官感觉还没我懂,然后把我挂了,我都还没嫌弃他是外包,他把我挂了……
第一份工作能做外包吗?
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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