主题要求:
想法:
首先遍历数组,找到可能的起点
定义一个helper函数,遍历当前起点的上、下、左、右元素,以确定是否有匹配给定单词的下一位,或者递归调用helper函数
如果上下左右下标越界,或者当前数组元素与当前单词的字符不同,则返回False
核心代码:
#遍历二维数组
傅里叶(len )板) :
forjinrange(Len ) board[0] ) :
#调用辅助函数
ifself.Helper(Board,I,j,word,0 ) :
返回真
返回假
#定义辅助函数:
defHelper(self,board,I,j,word,index ) :
#如果当前下标等于单词的长度,则表示前面的所有字符都匹配,并返回True
ifindex==Len(word ) :
返回真
#如果当前下标越界,或者当前元素字符与单词中的字符不同,则返回False
IfI0orI=len(board ) orj0orj ) len ) board[0] ) or board[i][j]!=word[index]:
返回假
#标记当前通过的数组元素的步骤
board[i][j]='* '
#递归调用当前元素的上下左右,查看是否与单词中的下一个字符相同
found=self.helper (板,i 1,j,word,索引1 ) ) ) ) ) ) ) ) )。
or self.helper (板,I,j 1,word,索引1 ) ) )。
or self.helper (板,i-1,j,word,索引1 ) )。
or self.helper (板,I,j-1,word,索引1 ) )。
#撤消标记的值
board [ I ] [ j ]=word [索引]
返回基金
完整代码:
类解决方案(对象) :
efExist(self,board,word ) :
''''
3360类型板: list [ list [ str ] ]
:type word: str
:rtype: bool
''''
傅里叶(len )板) :
forjinrange(Len ) board[0] ) :
ifself.Helper(Board,I,j,word,0 ) :
返回真
返回假
defHelper(self,board,I,j,word,index ) :
ifindex==Len(word ) :
返回真
IfI0orI=len(board ) orj0orj ) len ) board[0] ) or board[i][j]!=word[index]:
返回假
board[i][j]='* '
found=self.helper (板,i 1,j,word,索引1 ) ) ) ) ) ) ) ) )。
or self.helper (板,I,j 1,word,索引1 ) ) )。
or self.helper (板,i-1,j,word,索引1 ) )。
or self.helper (板,I,j-1,word,索引1 ) )。
board [ I ] [ j ]=word [索引]
返回基金