顺时针打印矩阵

来源:互联网 发布:python地址薄程序 编辑:程序博客网 时间:2024/06/02 03:30

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


原创粉丝点击