【题目描述】
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
【测试用例】
1. 多行数组;
2. 只有一行的数组;
3. 只有一列的数组;
4. 只有一行一列的数组;
【解决方案】
本题没有涉及复杂的算法或数据结构,画图可以让本题的思路更加具体化,考察动手画图用自己的思维解决问题的思路,只是考虑的问题稍多,并不难。
1. 考虑顺时针各个行列的打印规律;
2. 考虑不规则的打印情况;
我的代码实现,仅供参考:
1 public static void PrintMatrixClockWisely(int[][] arr) 2 { 3 if (arr == null || arr[0] == null) 4 { 5 return; 6 } 7 8 int left = 0; 9 int right = arr[0].Length - 1;10 int top = 0;11 int bottom = arr.GetLength(0) - 1;12 13 while (left <= right && bottom >= top)14 {15 //打印上边一行16 for (int i = left; i <= right; i++)17 {18 Console.WriteLine(arr[top][i]);19 }20 21 //打印右边一列22 if (top < bottom)23 {24 for (int i = top + 1; i <= bottom; i++)25 {26 Console.WriteLine(arr[i][right]);27 }28 }29 30 //打印下边一行31 if (left < right && top < bottom)32 {33 for (int i = right - 1; i >= left; i--)34 {35 Console.WriteLine(arr[bottom][i]);36 }37 }38 39 //打印左边一列40 if (left < right && top < bottom - 1)41 {42 for (int i = bottom - 1; i > top; i--)43 {44 Console.WriteLine(arr[i][left]);45 }46 }47 48 left++;49 right--;50 top++;51 bottom--;52 }53 }