【蓝桥杯】顺时针打印二维数组

题目说明:

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 

 

 

分析:

顺时针打印,可以理解为一圈一圈打印数组。可以从外圈先入手,最后在用循环控制其他圈。

每一圈分为上下左右四个边,变化的是行和列。

先确定边界左上角和右下角。

说明:定义 r, c的意义:在写到输出下边的时候发现leftUpRow ,leftUpCol 刚一直在变化;

现在要使用leftUpRow ,leftUpCol当作边界,发现都被改变了,不是原来的值了。所以赋值给新的变量。

上边:行不变,列在变。边界是c <= RightDownCol

在这需要注意的是列在++完已经超过RightDownCol。需要将其恢复到RightDownCol,以便做右边的操作;

右边:行在变,列不变。此处要将行+1,在进行循环输出操作。

下边和左边一次类推。

代码如下:(完整版,可AC)

 1 public class case1 {
 2 
 3     public static void main(String[] args) {
 5         int arr[][] = { 
 6                 { 1, 2, 3, 4 }, 
 7                 { 5, 6, 7, 8 }, 
 8                 { 9, 10, 11, 12 },
 9                 { 13, 14, 15, 16 } 
10                 };
11         print(arr);
12     }
13 
14     // 顺时针打印数组
15     static void print(int[][] matrix) {
16 
17         int leftUpRow = 0, leftUpCol = 0;
18         int RightDownRow = matrix.length - 1, 
19             RightDownCol = matrix[0].length - 1;
20 
21         while (leftUpRow <= RightDownRow && leftUpCol <= RightDownCol) {
23             int r = leftUpRow;
24             int c = leftUpCol;
25 
26             // 上边一条边;
27             while (c <= RightDownCol) {
28                 System.out.print(matrix[r][c++] + "  ");
29             }
30             // 恢复System.out.println(c);//c=4
31             c = RightDownCol;
32             // System.out.println(r);//r=0
33             r++;
34             // 右边
35             while (r <= RightDownRow) {
36                 System.out.print(matrix[r++][c] + "  ");
37             }
38 
39             r = RightDownRow;
40             c--;
41 
42             // 下边
43             while (c >= leftUpCol) {
44                 System.out.print(matrix[r][c--] + "  ");
45             }
46 
47             // 恢复
48             c = leftUpCol;
49             r--;
50             // 左边
51             while (r > leftUpRow) {
52                 System.out.print(matrix[r--][c] + "  ");
53             }
54 
55             leftUpRow++;
56             leftUpCol++;
57             RightDownCol--;
58             RightDownRow--;
59 
60         }
61 
62     }
63 
64 }
65                 

 

持续更新中……

 

posted on 2020-07-21 17:10  丁不煮  阅读(834)  评论(0)    收藏  举报

导航