Skip to content

Latest commit

 

History

History
63 lines (41 loc) · 1.69 KB

079._word_search.md

File metadata and controls

63 lines (41 loc) · 1.69 KB

###79. Word Search

题目: https://leetcode.com/problems/word-search/

难度: Medium

思路:

其实这个题和number of islands类似,是backtracking基本功的考查,但是基本功非常有待提高|||

比较核心的是dfs函数,然后这个函数有取巧的写法:如果outside of boundary就return False

loop, 如果碰到跟word开头的字母一样,把这个扔进去loop,可以考查这个char在这个board的上下左右是否可以选择,补课使用则重置used, 然后return

也还是之前摘录的,backtrack写法关键: 选择 (Options),限制 (Restraints),结束条件 (Termination)。

class Solution(object):
    def exist(self, board, word):
        """
        :type board: List[List[str]]
        :type word: str
        :rtype: bool
        """

        def dfs(board, used, row, col, x, y, word, idx):
        	if idx == len(word) :
        		return True

        	if x < 0 or x > row -1 or y < 0 or y > col -1 :
        		return False

        	if board[x][y] == word[idx] and not used[x][y]:
        		used[x][y] = 1 
        		left = dfs(board,used,row,col,x-1,y,word,idx+1)
        		right = dfs(board,used,row,col,x+1,y,word,idx+1)
        		up = dfs(board,used,row,col,x,y-1,word,idx+1)
        		down = dfs(board,used,row,col,x,y+1,word,idx+1)

        		used[x][y] = left or right or up or down
        		return left or right or up or down
        	return False


        row = len(board)
        col = len(board[0]) if row else 0
        used = [ [0 for i in range(col)] for j in range(row)]

        for i in range(row):
        	for j in range(col):
        			if dfs(board,used,row,col,i,j,word,0):
        				return True
        return False