Spiral Matrix

Problem

Given aNXN matrix, starting from the upper right corner of the matrix start printingvalues in a counter-clockwise fashion.
E.g.: Consider N = 4
Matrix= {a, b, c, d,
e, f, g, h,
i, j, k, l,
m, n, o, p}
Your function should output: dcbaeimnoplhgfjk

Solution

 1 public ArrayList<Integer> spiralOrder(int[][] matrix) {
 2     ArrayList<Integer> res = new ArrayList<Integer>();
 3     
 4     if(matrix == null || matrix.length == 0) {
 5         return res;
 6     }
 7     
 8     int row = matrix.length;
 9     int col = matrix[0].length;
10     
11     int x = 0;
12     int y = 0;
13     while(row > 0 && col > 0) {
14         //if row or col == 1, no circle can be found
15         if(row == 1) {
16             for(int i=0; i<col; i++) {
17                 res.add(matrix[x][y++]);
18             }
19             break;
20         }
21         if(col == 1) {
22             for(int i=0; i<row; i++) {
23                 res.add(matrix[x++][y]);
24             }
25             break;
26         }
27         
28         //row left to right
29         for(int i=0; i<col-1; i++) {
30             res.add(matrix[x][y++]);
31         }
32         //col high to low
33         for(int i=0; i<row-1; i++) {
34             res.add(matrix[x++][y]);
35         }
36         //row right to left
37         for(int i=0; i<col-1; i++) {
38             res.add(matrix[x][y--]);
39         }
40         //col low to high
41         for(int i=0; i<row-1; i++) {
42             res.add(matrix[x--][y]);
43         }
44         
45         row = row - 2;
46         col = col - 2;
47         x++;
48         y++;
49         
50     }
51     
52     return res;
53 }
原文地址:https://www.cnblogs.com/superbo/p/4112131.html