1. 程式人生 > >劍指offer29--順時針列印矩陣

劍指offer29--順時針列印矩陣

題目描述

輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 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.

 

思路:

  • 列印從0,0-------1,1-------------2.2
  • 從0,0開始每次遇到起點就列印一整圈

邊界條件比較麻煩。

行列對應這矩陣的行列---X,Y值

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int> res;
        int row=matrix.size();
        int line=matrix[0].size();
        printMatCore(matrix,row,line,res);
        return res;
    }
    
    void printMatCore(vector<vector<int> >& matrix,int row,int line,vector<int>& res)
    {
        if(row<=0||line<=0)
            return;
        int start=0;
        while(row>start*2&&line>start*2)
        {
            PrintCircle(matrix,row,line,start,res);
            ++start;
        }
    }
    
    void PrintCircle(vector<vector<int> >& matrix,int row,int line,int start,vector<int>& res)
    {
        int endY=line-1-start;//Y列
        int endX=row-1-start;//X行
        for(int i=start;i<=endY;i++)
            res.push_back(matrix[start][i]);
        if(endX>start)
            for(int i=start+1;i<=endX;i++)
                res.push_back(matrix[i][endY]);
        if(endX>start&&endY>start)
            for(int i=endY-1;i>=start;i--)
                res.push_back(matrix[endX][i]);
        if(endY>start&&endX>start+1)
            for(int i=endX-1;i>=start+1;i--)
                res.push_back(matrix[i][start]);
    }
};