剑指offer-19.顺时针打印指针

来源:互联网 发布:软件外包供应商管理 编辑:程序博客网 时间:2024/06/05 16:46

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.


思路:顺时针打印就是按圈数循环打印,一圈包含两行或者两列,在打印的时候会出现某一圈中只包含一行,要判断从左向右打印和从右向左打印的时候是否会出现重复打印,同样只包含一列时,要判断从上向下打印和从下向上打印的时候是否会出现重复打印的情况


class Solution {public:    vector<int> printMatrix(vector<vector<int> > matrix)     {        vector<int>res;        int row = matrix.size();    //矩阵行        int col = matrix[0].size(); //矩阵列        int left = 0, right = col - 1, top = 0, bottom = row - 1;        if (row == 0 || col == 0)            return res;        while (left <= right && top <= bottom)        {            for (int i = left; i <= right; i++)            {                res.push_back(matrix[top][i]);            }            for (int i = top + 1; i <= bottom; i++)            {                res.push_back(matrix[i][right]);            }            if (top != bottom)            for (int i = right - 1; i >= left; i--)            {                res.push_back(matrix[bottom][i]);            }            if (left != right)            for (int i = bottom - 1; i > top; i--)            {                res.push_back(matrix[i][left]);            }            top++;            left++;            right--;            bottom--;                    }        return res;    }};


0 0
原创粉丝点击