add new solutions
This commit is contained in:
parent
d798d5e8c9
commit
886b5e0a8e
34 changed files with 1164 additions and 0 deletions
61
solutions/0/q79/solution.go
Normal file
61
solutions/0/q79/solution.go
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
package q79
|
||||
|
||||
func search(board [][]byte, word string, prefixLen, row, col int) bool {
|
||||
if row < 0 || col < 0 || row >= len(board) || col >= len(board[0]) {
|
||||
return false
|
||||
}
|
||||
if word[prefixLen] != board[row][col] {
|
||||
return false
|
||||
}
|
||||
if prefixLen+1 == len(word) {
|
||||
return true
|
||||
}
|
||||
|
||||
c := board[row][col]
|
||||
board[row][col] = '#'
|
||||
yes := false ||
|
||||
search(board, word, prefixLen+1, row, col+1) ||
|
||||
search(board, word, prefixLen+1, row, col-1) ||
|
||||
search(board, word, prefixLen+1, row+1, col) ||
|
||||
search(board, word, prefixLen+1, row-1, col)
|
||||
|
||||
board[row][col] = c
|
||||
return yes
|
||||
}
|
||||
|
||||
func exist(board [][]byte, word string) bool {
|
||||
w, h := len(board[0]), len(board)
|
||||
if len(word) > w*h {
|
||||
return false
|
||||
}
|
||||
charFreq := make([]int, 26*2)
|
||||
idx := func(b byte) byte {
|
||||
if b >= 'a' {
|
||||
return b - 'a' + 26
|
||||
}
|
||||
return b - 'A'
|
||||
}
|
||||
for row := range board {
|
||||
for col := range board[0] {
|
||||
charFreq[idx(board[row][col])]++
|
||||
}
|
||||
}
|
||||
for i := range len(word) {
|
||||
ii := idx(word[i])
|
||||
charFreq[ii]--
|
||||
if charFreq[ii] < 0 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
for row := range board {
|
||||
for col := range board[0] {
|
||||
if search(board, word, 0, row, col) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
var _ = exist
|
||||
Loading…
Add table
Add a link
Reference in a new issue