【面试题20】顺时针打印矩阵

【题目描述】

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

【测试用例】

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         }

 

posted @ 2015-09-13 01:19  叫我霍啊啊啊  阅读(233)  评论(0编辑  收藏  举报