順時針打印矩陣

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

注意:分析每一步打印的前提條件。第一步總是需要的,因爲打印一圈至少有一步。如果只有一行,那就不用第二步了。也就是需要第二步的前提條件是終止行號大於起始行號。需要第三步打印的前提條件是圈內至少有兩行兩列,也就是說除了要求終止行號大於外,還要求終止列號大於起止列號。同理,需要打印第四步的前提條件是至少有三行兩列,因此要求終止行號比起始行號至少大2,同時終止列號大於起止列號。

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Solution
{
public:
    
void PrintCircle(vector<vector<int> > &matrixmatrix, int clos, int rows, int start, vector<int> &res)
    {
        
int endX = clos - 1 - start;
        
int endY = rows - 1 - start;
//從左到右打印第一行
        
for (int i = start; i <= endX; i++)
        {
            
int number = matrixmatrix[start][i];
            res.push_back(number);
        }
//從上到下打印一列
        
if (start < endY)
        {
            
for (int i = start + 1; i <= endY; ++i)
            {
                
int number = matrixmatrix[i][endX];
                res.push_back(number);
            }
        }
//從右到左打印一行
        
if (start < endX && start < endY)
        {
            
for (int i = endX - 1; i >= start; --i)
            {
                
int number = matrixmatrix[endY][i];
                res.push_back(number);
            }
        }
//從下到上打印一列
        
if (start < endX && start < endY - 1)
        {
            
for (int i = endY - 1; i >= start + 1; --i)
            {
                
int number = matrixmatrix[i][start];
                res.push_back(number);
            }
        }
    }
    vector<
int> printMatrix(vector<vector<int> > matrix)
    {
        
int rows = matrix.size();//行數
        
int clos = matrix[0].size();//列數
        vector<
int> res;
        
if (matrix.size() == 0 || clos == 0 || rows == 0return res;
        
int start = 0;
        
while (clos > start * 2 && rows > start * 2)//讓循環繼續的條件
        {
            PrintCircle(matrix, clos, rows, start, res);
            ++start;
        }
        
return res;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章