大佬 为啥我这样写只有60%,想到走过的路要再走了,但是还是没过 func numberOfPatrolBlocks(m int, n int, block [][]int32) (res int32) { dx := []int{0, 1, 0, -1} dy := []int{1, 0, -1, 0} x, y, d := 0, 0, 0 st := make([][]int, m) for i := 0; i < m; i++ { st[i] = make([]int, n) } var tt func(int, int) bool tt = func(a, b int) bool { if a >= 0 &amp;&amp; a < m &amp;&amp; b >= 0 &amp;&amp; b < n &amp;&amp; st[a][b] < 1000 &amp;&amp; block[a][b] == 0 { return true } return false } var check func(int, int) bool check = func(a, b int) bool { for i := 0; i < 4; i++ { k := (d + i) % 4 aa, bb := x+dx[k], y+dy[k] if tt(aa, bb) { d = k return true } } return false } for true { if st[x][y] == 0 { //fmt.Println(x, y) res++ } st[x][y]++ if !check(x, y) { break } x, y = x+dx[d], y+dy[d] } return }