-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathweek 5 542. 01 Matrix
More file actions
69 lines (60 loc) · 1.81 KB
/
week 5 542. 01 Matrix
File metadata and controls
69 lines (60 loc) · 1.81 KB
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class Solution {
int row;
int col;
int [] dx = {1, -1, 0, 0};
int [] dy = {0, 0, 1, -1};
public List<List<Integer>> updateMatrix(List<List<Integer>> matrix){
if (matrix == null || matrix.size() == 0 || matrix.get(0).size() == 0){
return matrix;
}
row = matrix.size();
col = matrix.get(0).size();
preSet(matrix);
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
if(matrix.get(i).get(j) == 1){
helper (matrix, 1, i, j);
}
}
}
return matirx;
}
}
public void preSet(List<List<Integer>> matrix){
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
if(matrix.get(i).get(j)==0){
continue;
}
boolean flag = false;
for (int k = 0; k < 4; k++){
int x = i + dx[k];
int y = j + dy[k];
if (x < 0 || x >= row || y < 0 || y >= col){
continue;
}
flag |= matrix.get(x).get(y) == 0;
}
if(!flag){
matrix.get(i).set(j, Integer.MAX_VALUE);
}
}
}
}
public void helper (List<List<Integer>> matrix, int dist, int x, int y){
if (matrix.get(x).get(y) < dist){
return;
}
if(matrix.get(x).get(y) == dist && matrix.get(x).get(y) != 1){
return;
}
matrix.get(x).set(y, dist);
for(int i = 0; i < 4; i++){
int xNext = x + dx[i];
int yNext = y + dy[i];
if(xNext < 0 || xNext >= row || yNext < 0 || yNext >= col ){
continue;
}
helper(matrix, dist + 1, xNext, yNext);
}
}