比较复杂,见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; }