面试题20:顺时针打印矩阵

比较复杂,见P128解析

 1 void PrintMatrixClockwisely(int** numbers, int columns, int rows)
 2 {
 3     if(numbers == NULL || columns <= 0 || rows <= 0)
 4         return;
 5 
 6     int start = 0;
 7 
 8     while(columns > start * 2 && rows > start * 2)
 9     {
10         PrintMatrixInCircle(numbers, columns, rows, start);
11 
12         ++start;
13     }
14 }
15 
16 void PrintMatrixInCircle(int** numbers, int columns, int rows, int start)
17 {
18     int endX = columns - 1 - start;
19     int endY = rows - 1 - start;
20 
21     // 从左到右打印一行
22     for(int i = start; i <= endX; ++i)
23     {
24         int number = numbers[start][i];
25         printNumber(number);
26     }
27 
28     // 从上到下打印一列
29     if(start < endY)
30     {
31         for(int i = start + 1; i <= endY; ++i)
32         {
33             int number = numbers[i][endX];
34             printNumber(number);
35         }
36     }
37 
38     // 从右到左打印一行
39     if(start < endX && start < endY)
40     {
41         for(int i = endX - 1; i >= start; --i)
42         {
43             int number = numbers[endY][i];
44             printNumber(number);
45         }
46     }
47 
48     // 从下到上打印一行
49     if(start < endX && start < endY - 1)
50     {
51         for(int i = endY - 1; i >= start + 1; --i)
52         {
53             int number = numbers[i][start];
54             printNumber(number);
55         }
56     }
57 }

 另一种方法:

http://blog.csdn.net/Irean_Lau/article/details/51072768

/*
    20 :> 顺时针打印数组
*/
vector<int> printMatrix(vector<vector<int> > matrix) {
    vector<int>res;
    res.clear();
    int row = matrix.size();//行数
    int col = matrix[0].size();//列数

    int circle = ((row < col ? row : col) - 1) / 2 + 1;//圈数

    for (int i = 0; i < circle; i++)
    {
        //zuo->you
        for (int j = i; j < col - i; ++j)
            res.push_back(matrix[i][j]);
        //shang->xia
        for (int k = i + 1; k < row - i; ++k)
            res.push_back(matrix[k][col - i - 1]);
        //you->zuo
        for (int l = col - i - 2; (l >= i) && (row - i - 1 != i); --l)
            res.push_back(matrix[row - i - 1][l]);
        //xia->shang
        for (int m = row - i - 2; (m > i) && (col - i - 1 != i); --m)
            res.push_back(matrix[m][i]);
    }
    return res;
}
原文地址:https://www.cnblogs.com/raichen/p/5646952.html