-
-
Notifications
You must be signed in to change notification settings - Fork 8.8k
/
Copy pathSolution.java
41 lines (39 loc) · 1.08 KB
/
Solution.java
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
class Solution {
private List<Integer> res;
public List<Integer> spiralOrder(int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
res = new ArrayList<>();
int i1 = 0, i2 = m - 1;
int j1 = 0, j2 = n - 1;
while (i1 <= i2 && j1 <= j2) {
add(matrix, i1++, j1++, i2--, j2--);
}
return res;
}
private void add(int[][] matrix, int i1, int j1, int i2, int j2) {
if (i1 == i2) {
for (int j = j1; j <= j2; ++j) {
res.add(matrix[i1][j]);
}
return;
}
if (j1 == j2) {
for (int i = i1; i <= i2; ++i) {
res.add(matrix[i][j1]);
}
return;
}
for (int j = j1; j < j2; ++j) {
res.add(matrix[i1][j]);
}
for (int i = i1; i < i2; ++i) {
res.add(matrix[i][j2]);
}
for (int j = j2; j > j1; --j) {
res.add(matrix[i2][j]);
}
for (int i = i2; i > i1; --i) {
res.add(matrix[i][j1]);
}
}
}