@@ -125,3 +125,46 @@ def backtrace(res=[]):
125125
126126 backtrace ()
127127 return results
128+
129+ def exist (self , board : List [List [str ]], word : str ) -> bool :
130+ """
131+ 79
132+ :param board:
133+ :param word:
134+ :return:
135+ """
136+ if not board or not board [0 ]:
137+ return False
138+ if not word :
139+ return False
140+
141+ for i in range (len (board )):
142+ for j in range (len (board [0 ])):
143+ if board [i ][j ] == word [0 ]:
144+ path = {(i , j )}
145+ is_valid = self .check_valid (board , path , word [1 :], i , j )
146+ if is_valid :
147+ return True
148+ return False
149+
150+ def check_valid (self , board , path , word , i , j ):
151+ if not word :
152+ return True
153+
154+ if i > 0 and board [i - 1 ][j ] == word [0 ] and (i - 1 , j ) not in path :
155+ is_valid = self .check_valid (board , path | {(i - 1 , j )}, word [1 :], i - 1 , j )
156+ if is_valid :
157+ return True
158+ if i < len (board ) - 1 and board [i + 1 ][j ] == word [0 ] and (i + 1 , j ) not in path :
159+ is_valid = self .check_valid (board , path | {(i + 1 , j )}, word [1 :], i + 1 , j )
160+ if is_valid :
161+ return True
162+ if j > 0 and board [i ][j - 1 ] == word [0 ] and (i , j - 1 ) not in path :
163+ is_valid = self .check_valid (board , path | {(i , j - 1 )}, word [1 :], i , j - 1 )
164+ if is_valid :
165+ return True
166+ if j < len (board [0 ]) - 1 and board [i ][j + 1 ] == word [0 ] and (i , j + 1 ) not in path :
167+ is_valid = self .check_valid (board , path | {(i , j + 1 )}, word [1 :], i , j + 1 )
168+ if is_valid :
169+ return True
170+ return False
0 commit comments