給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。
board =[[
'a',
'b',
'c',
'e'],[
's',
'f',
'c',
's'],[
'a',
'd',
'e',
'e']
]給定 word =
"abcced"
, 返回 true.
給定 word =
"see"
, 返回 true.
給定 word =
"abcb"
, 返回 false.
思路倒是很簡單。用dfs找出來符合條件的即可。不過我可能是老了,竟然不會寫dfs了。真的蛋疼。
class
solution
:def
exist
(self, board, word:
str)
->
bool
: target_word = word[0]
self.height =
len(board)
self.width =
len(board[0]
) self.used =[[
false
for i in
range
(self.width)
]for i in
range
(self.height)
] flag =
false
for i in
range
(self.height)
:for j in
range
(self.width)
:if board[i]
[j]== target_word:
self.used[i]
[j]=
true
flag = self.dfs(board,i,j,word[1:
])if flag:
return flag
self.used[i]
[j]=
false
# 狀態回退
return flag
defdfs(self,board,i,j,word):if
len(word)==0
:return
true
target_search = word[0]
stack =
# 搜尋四個方向。stack暫存結果if0
not self.used[i]
[j-1
]and board[i]
[j-1
]== target_search:
(i,j-1)
)if j1and
not self.used[i]
[j+1
]and board[i]
[j+1
]== target_search:
(i,j+1)
)if0not self.used[i-1]
[j]and board[i-1]
[j]== target_search:
(i-1
,j))
if i1and
not self.used[i+1]
[j]and board[i+1]
[j]== target_search:
(i+1
,j))
for i in stack:
self.used[i[0]
][i[1]
]=true
flag = self.dfs(board,i[0]
,i[1
],word[1:
])if flag:
return flag
self.used[i[0]
][i[1]
]=false
# 狀態回退
return
false
s = solution(
)print
(s.exist([[
"c",
"a",
"a"],[
"a",
"a",
"a"],[
"b",
"c",
"d"]],
"aab"
))
79 單詞搜尋
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回t...
79 單詞搜尋
不允許重複使用字母 seen 0for i in range n for j in range m for i in range m for j in range n if self.search board,word,0,i,j,seen return true return false word...
79 單詞搜尋
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...