1
+ // Runtime: 98 ms (Top 88.24%) | Memory: 61 MB (Top 77.65%)
1
2
class Solution {
2
3
public int openLock (String [] deadends , String target ) {
3
- // Converted target to Integer type.
4
+ // Converted target to Integer type.
4
5
int t = Integer .parseInt (target );
5
6
HashSet <Integer > visited = new HashSet <>();
6
-
7
- // Converting deadend strings to Integer type. To prevent from visiting deadend, we already mark them visited.
7
+
8
+ // Converting deadend strings to Integer type. To prevent from visiting deadend, we already mark them visited.
8
9
for (String str : deadends ){
9
10
visited .add (Integer .parseInt (str ));
10
11
}
11
- // BFS
12
+ // BFS
12
13
Queue <Integer > q = new ArrayDeque <>();
13
- // We make sure that 0 itself isn't a deadend
14
+ // We make sure that 0 itself isn't a deadend
14
15
if (visited .contains (0 )){
15
16
return -1 ;
16
17
}
@@ -24,17 +25,17 @@ public int openLock(String[] deadends, String target) {
24
25
if (t == elem ){
25
26
return level ;
26
27
}
27
- // Will help check 4 digits of the element. From digit with low precendence(ones place) to high precedence(thousands place)
28
+ // Will help check 4 digits of the element. From digit with low precendence(ones place) to high precedence(thousands place)
28
29
for (int i = 1 ; i < 10000 ; i = i *10 ){
29
- // The wheel can be rotated in two directions. Hence two numbers.
30
- int num1 ;
30
+ // The wheel can be rotated in two directions. Hence two numbers.
31
+ int num1 ;
31
32
int num2 ;
32
- // The wheel at 0 can become 1 or 9 due to wrapping.
33
+ // The wheel at 0 can become 1 or 9 due to wrapping.
33
34
if (elem / i % 10 == 0 ){
34
35
num1 =elem + i ;
35
36
num2 = elem + i * 9 ;
36
37
}
37
- // The wheel at 9 can become 0 or 8 due to wrapping.
38
+ // The wheel at 9 can become 0 or 8 due to wrapping.
38
39
else if (elem / i % 10 == 9 ){
39
40
num1 = elem - i * 9 ;
40
41
num2 = elem -i ;
@@ -43,19 +44,19 @@ else if(elem / i % 10 == 9){
43
44
num1 = elem -i ;
44
45
num2 = elem + i ;
45
46
}
46
- // Checking if numbers have already been visited.
47
+ // Checking if numbers have already been visited.
47
48
if (!(visited .contains (num1 ))){
48
49
visited .add (num1 );
49
50
q .add (num1 );
50
51
}
51
52
if (!(visited .contains (num2 ))){
52
53
visited .add (num2 );
53
54
q .add (num2 );
54
- }
55
+ }
55
56
}
56
57
}
57
58
level ++;
58
59
}
59
60
return -1 ;
60
61
}
61
- }
62
+ }
0 commit comments