79. 单词搜索

链接

题目.

难度:

middle

解答:

这是一个典型的深度优先查找算法

package main

import "fmt"

func deepSearch(travelled map[int]bool, board [][]byte, i, j int, word string) bool {
     
	if len(word) == 0 {
     
		return true
	}

	if i >= len(board) || i < 0 {
     
		return false
	}

	if j >= len(board[0]) || j < 0 {
     
		return false
	}

	pos := i*len(board[0]) + j
	if travelled[pos] {
     
		return false
	}

	if board[i][j] != word[0] {
     
		return false
	}

	travelled[pos] = true
	fmt.Println("checking ", i, j, word)
	res := deepSearch(travelled, board, i+1, j, word[1:]) ||
		deepSearch(travelled, board, i-1, j, word[1:]) ||
		deepSearch(travelled, board, i, j+1, word[1:]) ||
		deepSearch(travelled, board, i, j-1, word[1:])
	travelled[pos] = false

	return res
}

func exist(board [][]byte, word string) bool {
     
	if len(word) == 0 {
     
		return true
	}

	if len(board) == 0 {
     
		return false
	}

	travelled := make(map[int]bool, len(board)*len(board[0]))
	for i := 0; i < len(board); i++ {
     
		for j := 0; j < len(board[i]); j++ {
     
			if deepSearch(travelled, board, i, j, word) {
     
				return true
			}
		}
	}

	return false
}

func main() {
     
	board := [][]byte{
     
		{
     'A', 'B', 'C', 'E'},
		{
     'S', 'F', 'E', 'S'},
		{
     'A', 'D', 'E', 'E'},
	}
	fmt.Println(exist(board, "ABCESEEEFS"))
}


复杂度分析

time

O(n*n)

space

O(n)

执行结果

执行用时 :
12 ms
, 在所有 Go 提交中击败了
30.54%
的用户
内存消耗 :
5.1 MB
, 在所有 Go 提交中击败了
21.43%
的用户

你可能感兴趣的:(leetcode)