spiral matrix i, ii


Spiral Matrix I
感觉这题就属于,肯定会写,但是就是很难bug-free类型的。

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
public List<Integer> (int[][] matrix) {
List<Integer> ans = new ArrayList<Integer>();
if (matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0)
return ans;
int rBegin = 0, cBegin = 0, rEnd = matrix.length - 1, cEnd = matrix[0].length - 1;
while (rBegin <= rEnd && cBegin <= cEnd) {

for (int i = cBegin; i <= cEnd; ++i) {
ans.add(matrix[rBegin][i]);
}
rBegin += 1;
// go down
for (int i = rBegin; i <= rEnd; ++i) {
ans.add(matrix[i][cEnd]);
}
cEnd -= 1;
// go left
if (rBegin > rEnd)
break;
for (int i = cEnd; i >= cBegin; --i)
ans.add(matrix[rEnd][i]);
rEnd -= 1;
// go up
if (cBegin > cEnd || rBegin > rEnd)
break;
for (int i = rEnd; i >= rBegin; --i)
ans.add(matrix[i][cBegin]);
cBegin += 1;
}

return ans;
}

Spiral Matrix II

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
public int[][] generateMatrix(int n) {
int[][] board = new int[n][n];
int rBegin = 0, rEnd = n - 1, cBegin = 0, cEnd = n - 1;
int num = 1;
while (rBegin <= rEnd && cBegin <= cEnd) {

for (int i = cBegin; i <= cEnd; ++i) {
board[rBegin][i] = num++;
}
rBegin += 1;
// go down
for (int i = rBegin; i <= rEnd; ++i) {
board[i][cEnd] = num++;
}
cEnd -= 1;
// go left
if (rBegin > rEnd || cBegin > cEnd)
break;
for (int i = cEnd; i >= cBegin; --i) {
board[rEnd][i] = num++;
}
rEnd -= 1;
if (rBegin > rEnd || cBegin > cEnd)
break;
for (int i = rEnd; i >= rBegin; --i) {
board[i][cBegin] = num++;
}
cBegin += 1;
}
return board;
}