找Bug 用例
https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/
func exist(board [][]byte, word string) bool {
n := len(word)
r := len(board)
c := len(board[0])
if n > r*c {
return false
}
g := func(p, q, a, b int) bool {
return (p == a && (q-b == 1 || q-b == -1)) || ((p-a == 1 || p-a == -1) && q == b)
}
for i := 0; i < n; i++ {
v := word[i]
p, q, a, b := -1, -1, -1, -1
f := false
for j := 0; j < r; j++ {
for k := 0; k < c; k++ {
u := board[j][k]
if v == u {
p, q = j, k
if a != -1 {
if !g(p, q, a, b) {
return false
}
}
a, b = p, q
f = true
break
}
}
}
if !f {
return true
}
}
return true
}
func exist(board [][]byte, word string) bool {
n := len(word)
r := len(board)
c := len(board[0])
if n > r*c {
return false
}
adjoin := func(p, q, a, b int) bool {
return (p == a && (q-b == 1 || q-b == -1)) || ((p-a == 1 || p-a == -1) && q == b)
}
m := map[int][]int{}
had := func(r, c int) bool {
_, e := m[r]
if e {
for _, v := range m[r] {
if v == c {
return true
}
}
m[r] = append(m[r], c)
} else {
m[r] = []int{c}
}
return false
}
for i := 0; i < n; i++ {
v := word[i]
p, q, a, b := -1, -1, -1, -1
hit := false
for j := 0; j < r; j++ {
for k := 0; k < c; k++ {
u := board[j][k]
if v == u {
if had(j, k) {
continue
}
p, q = j, k
if a != -1 {
if !adjoin(p, q, a, b) {
return false
}
}
a, b = p, q
hit = true
break
}
}
if hit {
break
}
}
if !hit {
return false
}
}
return true
}
边界值BUG
func exist(board [][]byte, word string) bool {
n := len(word)
r := len(board)
c := len(board[0])
if n > r*c {
return false
}
m := map[int][]int{}
had := func(r, c int, add bool) bool {
_, e := m[r]
if e {
for _, v := range m[r] {
if v == c {
return true
}
}
if add {
m[r] = append(m[r], c)
}
} else {
if add {
m[r] = []int{c}
}
}
return false
}
start := [][]int{}
v := word[0]
for j := 0; j < r; j++ {
for k := 0; k < c; k++ {
u := board[j][k]
if v == u {
start = append(start, []int{j, k})
}
}
}
for _, p := range start {
a, b := p[0], p[1]
ok := false
if b-1 >= 0 {
u := board[a][b-1]
if !had(a, b-1, false) {
if u == v {
had(a, b-1, true)
}
}
ok = true
continue
}
if b+1 <= c-1 {
u := board[a][b+1]
if !had(a, b+1, false) {
if u == v {
had(a, b+1, true)
}
}
ok = true
continue
}
if a-1 >= 0 {
u := board[a-1][b]
if !had(a-1, b, false) {
if u == v {
had(a-1, b, true)
}
}
ok = true
continue
}
if a+1 <= r-1 {
u := board[a+1][b]
if !had(a+1, b, false) {
if u == v {
had(a+1, b, true)
}
}
ok = true
continue
}
if !ok {
return false
}
}
return true
}
func exist(board [][]byte, word string) bool {
n := len(word)
r := len(board)
c := len(board[0])
if n > r*c {
return false
}
m := map[int][]int{}
had := func(r, c int, add bool) bool {
_, e := m[r]
if e {
for _, v := range m[r] {
if v == c {
return true
}
}
if add {
m[r] = append(m[r], c)
}
} else {
if add {
m[r] = []int{c}
}
}
return false
}
start := [][]int{}
v := word[0]
for j := 0; j < r; j++ {
for k := 0; k < c; k++ {
u := board[j][k]
if v == u {
start = append(start, []int{j, k})
}
}
}
if len(start) == 0 {
return false
}
for _, p := range start {
a, b := p[0], p[1]
ok0 := true
for i := 1; i < n; i++ {
v := word[i]
ok := false
if b-1 >= 0 {
u := board[a][b-1]
if !had(a, b-1, false) {
if u == v {
had(a, b-1, true)
ok = true
b--
continue
}
}
}
if b+1 <= c-1 {
u := board[a][b+1]
if !had(a, b+1, false) {
if u == v {
had(a, b+1, true)
ok = true
b++
continue
}
}
}
if a-1 >= 0 {
u := board[a-1][b]
if !had(a-1, b, false) {
if u == v {
had(a-1, b, true)
ok = true
a--
continue
}
}
}
if a+1 <= r-1 {
u := board[a+1][b]
if !had(a+1, b, false) {
if u == v {
had(a+1, b, true)
ok = true
a++
continue
}
}
}
if !ok {
ok0 = false
break
}
}
if ok0 {
return true
}
}
return false
}

浙公网安备 33010602011771号