剑指offer(19)—顺时针打印矩阵

来源:互联网 发布:丽江知乎 编辑:程序博客网 时间:2024/06/05 17:17

顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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 Rows = matrix.size();        if(Rows == 0)            return res;        int Cols = matrix[0].size();        int i = 0, j = 0;        int start = 0;        while(2 * start < Cols && 2 * start < Rows){            int endX = Cols - 1 - start;            int endY = Rows - 1 - start;            //从左向右            for(int j = start; j <= endX; j++)                res.push_back(matrix[start][j]);            //从上向下            if(start < endY){                for(int i = start + 1; i <= endY; i++)                    res.push_back(matrix[i][endX]);            }            //从右向左            if(start < endX && start < endY){                for(int j = endX - 1; j >= start; j--)                    res.push_back(matrix[endY][j]);            }            //从下向上            if(start < endY && start < endX){                for(int i = endY - 1; i > start; i--)                    res.push_back(matrix[i][start]);            }            start++;        }        return res;    }};
原创粉丝点击