File tree Expand file tree Collapse file tree 2 files changed +77
-0
lines changed
lcof2/剑指 Offer II 109. 开密码锁 Expand file tree Collapse file tree 2 files changed +77
-0
lines changed Original file line number Diff line number Diff line change @@ -236,6 +236,47 @@ public:
236
236
};
237
237
```
238
238
239
+ #### Go
240
+
241
+ ```go
242
+ func openLock(deadends []string, target string) int {
243
+ dead := map[string]bool{}
244
+ for _, s := range deadends {
245
+ dead[s] = true
246
+ }
247
+ if dead["0000"] {
248
+ return -1
249
+ }
250
+ if target == "0000" {
251
+ return 0
252
+ }
253
+ q := []string{"0000"}
254
+ visited := map[string]bool{"0000": true}
255
+ step := 0
256
+ for len(q) > 0 {
257
+ step++
258
+ size := len(q)
259
+ for i := 0; i < size; i++ {
260
+ cur := q[0]
261
+ q = q[1:]
262
+ for j := 0; j < 4; j++ {
263
+ for k := -1; k <= 1; k += 2 {
264
+ next := cur[:j] + string((cur[j]-'0'+byte(k)+10)%10+'0') + cur[j+1:]
265
+ if next == target {
266
+ return step
267
+ }
268
+ if !dead[next] && !visited[next] {
269
+ q = append(q, next)
270
+ visited[next] = true
271
+ }
272
+ }
273
+ }
274
+ }
275
+ }
276
+ return -1
277
+ }
278
+ ```
279
+
239
280
<!-- tabs:end -->
240
281
241
282
<!-- solution:end -->
Original file line number Diff line number Diff line change
1
+ func openLock (deadends []string , target string ) int {
2
+ dead := map [string ]bool {}
3
+ for _ , s := range deadends {
4
+ dead [s ] = true
5
+ }
6
+ if dead ["0000" ] {
7
+ return - 1
8
+ }
9
+ if target == "0000" {
10
+ return 0
11
+ }
12
+ q := []string {"0000" }
13
+ visited := map [string ]bool {"0000" : true }
14
+ step := 0
15
+ for len (q ) > 0 {
16
+ step ++
17
+ size := len (q )
18
+ for i := 0 ; i < size ; i ++ {
19
+ cur := q [0 ]
20
+ q = q [1 :]
21
+ for j := 0 ; j < 4 ; j ++ {
22
+ for k := - 1 ; k <= 1 ; k += 2 {
23
+ next := cur [:j ] + string ((cur [j ]- '0' + byte (k )+ 10 )% 10 + '0' ) + cur [j + 1 :]
24
+ if next == target {
25
+ return step
26
+ }
27
+ if ! dead [next ] && ! visited [next ] {
28
+ q = append (q , next )
29
+ visited [next ] = true
30
+ }
31
+ }
32
+ }
33
+ }
34
+ }
35
+ return - 1
36
+ }
You can’t perform that action at this time.
0 commit comments