顺时针打印矩阵

来源:互联网 发布:喜欢男朋友的丁丁知乎 编辑:程序博客网 时间:2024/05/18 15:24

题目见此链接
简单说一下思路:打印总共可分为四部,从左往右,从上到下,从右往左,从下到上。执行完这四步后,相当于对原矩阵剥了一层皮,可看成一个新的待打印矩阵。然后重复执行上述四步

class Solution {public:    //如果只是输出打印数字的话,用递归方式更好    vector<int> printMatrix(vector<vector<int> > matrix) {        int Col = matrix[0].size();//矩阵有多少列        int Row = matrix.size();//矩阵有多少行        vector<int>result;//输出矩阵        //下标        int index_row = 0;        int index_col = 0;        int circleCount = 1;//计算打印的圈数        //空矩阵        if(Col == 0 || Col == 0)            return result;        //矩阵存在且至少有两行两列        while(index_row < Row - 1 && index_col < Col - 1)        {            //打印从左往右的数据            for(;index_col < Col - 1;index_col ++)            {                result.push_back(matrix[index_row][index_col]);            }            //打印从上往下的数据            for(;index_row < Row - 1;index_row ++)            {                result.push_back(matrix[index_row][index_col]);            }            //打印从右往左的数据            for(;index_col >= circleCount; index_col --)            {                result.push_back(matrix[index_row][index_col]);            }            for(;index_row >= circleCount ; index_row --)            {                result.push_back(matrix[index_row][index_col]);            }            index_row ++;            index_col ++;            Col --;            Row --;            circleCount ++;        }        //处理只有一行(列)的情况        if(Col - 1 == index_col)//唯一列        {            for(;index_row < Row;index_row ++)            {                result.push_back(matrix[index_row][index_col]);            }            return result;        }else if(Row - 1 == index_row)//唯一行        {            for(;index_col < Col;index_col ++)            {                result.push_back(matrix[index_row][index_col]);            }            return result;        }else//此时为空            return result;    }};
0 0
原创粉丝点击