@@ -125,3 +125,46 @@ def backtrace(res=[]):
125
125
126
126
backtrace ()
127
127
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