079 word search
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