054.Spiral Matrix

##Solution 2: accepted

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public static List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<>();
int m = matrix.length;// rows
if (m == 0) {
return result;
}
int n = matrix[0].length;// columns
int topOffset = 0;
int rightOffset = 0;
int bottomOffset = 0;
int leftOffset = 0;
while (true) {
// top
for (int i = leftOffset; i < n - rightOffset; i++) {
result.add(matrix[topOffset][i]);
}
topOffset++;
if (topOffset + bottomOffset == m) {
break;
}
// right
for (int i = topOffset; i < m - bottomOffset; i++) {
result.add(matrix[i][n - 1 - rightOffset]);
}
rightOffset++;
if (leftOffset + rightOffset == n) {
break;
}
// bottom
for (int i = n - 1 - rightOffset; i >= leftOffset; i--) {
result.add(matrix[m - 1 - bottomOffset][i]);
}
bottomOffset++;
if (topOffset + bottomOffset == m) {
break;
}
// left
for (int i = m - 1 - bottomOffset; i >= topOffset; i--) {
result.add(matrix[i][leftOffset]);
}
leftOffset++;
if (leftOffset + rightOffset == n) {
break;
}
}
return result;
}