剑指offer-算法题练习:part21 顺时针打印矩阵

来源:互联网 发布:网络设计方案图 编辑:程序博客网 时间:2024/04/30 15:56

剑指offer-算法题练习:part21 顺时针打印矩阵

时间限制:1秒空间限制:32768K
本题知识点: 数组

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.


<解析1>

用旋转魔法的方式,一直取出第一行;
例如
1 2 3
4 5 6
7 8 9
输出并删除第一行后,变为
4 5 6
7 8 9
再进行一次逆时针旋转,就变成:
6 9
5 8
4 7
继续重复上述操作即可。

code1

class Solution {public:    vector<int> printMatrix(vector<vector<int> > matrix) {        vector<int> res;        //res.clear();        int a=0,row = matrix.size()-1,col=matrix[0].size()-1,i,j;        if(matrix.size()==0||matrix[0].size()==0) return res;        do{            for(i=a,  j=a;j<=col;j++)   res.push_back(matrix[i][j]);            for(i=a+1,j=col;i<=row;i++) res.push_back(matrix[i][j]);            if(a!=row) for(i=row,  j=col-1;j>=a  ;j--) res.push_back(matrix[i][j]);            if(a!=col) for(i=row-1,j=a    ;i>=a+1;i--) res.push_back(matrix[i][j]);            }while(++a<=--row&&a<=--col);        return res;    }};


code2

class Solution {public:    vector<int> printMatrix(vector<vector<int> > matrix) {        /*解题思路:顺时针打印就是按圈数循环打印,一圈包含两行或者两列,        在打印的时候会出现某一圈中只包含一行,要判断从左向右打印和从右向        左打印的时候是否会出现重复打印,同样只包含一列时,        要判断从上向下打印和从下向上打印的时候是否会出现重复打印的情况*/        vector<int> result;        result.clear();        int row = matrix.size();//行数        int col = matrix[0].size();//列数        //计算打印的圈数        int circle=((row<col?row:col)-1)/2+1;//圈数        //int circle=((row<col?row:col)-1)/2+1;//圈数        for(int i = 0;i<circle;i++){            //从左向右打印            for(int j=i;j<col-i;j++)                result.push_back(matrix[i][j]);            //从上往下的每一列数据            for(int k=i+1;k<row-i;k++)                result.push_back(matrix[k][col-1-i]);            //判断是否会重复打印从右向左的每行数据            for(int m = col-i-2;(m>=i)&&(row-i-1 != i);m--)                result.push_back(matrix[row-i-1][m]);            //判断是否会重复打印从上往下的每行数据            for(int n = row-i-2;(n>i)&&(col-i-1 != i);n--)                result.push_back(matrix[n][i]);        }//for        return result;    }};



0 0
原创粉丝点击