题目:
给定一个M*N的字符网格-board,一个字符串word,如果word路径在网格中存在,返回true。
例如:
1.输入: board = [["A","B","C","E"],["S","F","C","S"],["A","D", "E","E"]], word = "ABCCED";
输出:true
2.输入: board = [["A","B","C","E"],["S","F","C","S"],["A","D", "E","E"]], word = "SEE" 输出: true
3.输入: board = [["A","B","C","E"],["S","F","C","S"],["A","D", "E","E"]], word = "ABCB" 输出: false
约束条件:
1.m == board.length ;n = board[i].length
2.1 <= m, n <= 6
3.1 <= word.length <= 15
4.board并且word仅由小写和大写英文字母组成。
解析:可参考
代码:
def find_word(board , word):
m , n = len(board) , len(board[0])
def find_other(i, j, word_other):
if not word_other:
return True
mid_flag = False
origional, board[i][j] = board[i][j], '-'
for new_i, new_j in ((i - 1, j), (i + 1, j), (i, j - 1), (i, j + 1)):
if 0 <= new_i < m and 0 <= new_j < n:
if word_other[0] == board[new_i][new_j]:
if find_other(new_i, new_j, word_other[1:]):
mid_flag = True
break
board[i][j] = origional
return mid_flag
for mi in range(m):
for ni in range(n):
if board[mi][ni] == word[0]:
if find_other(mi , ni , word[1:] ):
return True
return False