@@ -16,23 +16,19 @@ public boolean exist(char[][] board, String word) {
1616 - space: O(M * N) which marks if block of the indices is visited or not
1717 */
1818 boolean [][] isVisited = new boolean [board .length ][board [0 ].length ];
19- boolean ret = false ;
2019 for (int y = 0 ; y < board .length ; y ++) {
2120 for (int x = 0 ; x < board [0 ].length ; x ++) {
22- if (board [y ][x ] == word .charAt (0 )) {
23- isVisited [y ][x ] = true ;
24- ret = ret || isWordExists (board , isVisited , word , y , x , 0 );
25- isVisited [y ][x ] = false ;
26- }
21+ if (isWordExists (board , isVisited , word , y , x , 0 )) return true ;
2722 }
2823 }
29- return ret ;
24+ return false ;
3025 }
3126
3227 private boolean isWordExists (char [][] board , boolean [][] isVisited , String word , int y , int x , int idx ) {
28+ if (board [y ][x ] != word .charAt (idx )) return false ;
3329 if (idx == word .length () - 1 ) return true ;
34- // System.out.println(String.format("(%d, %d): %s", y, x, word.charAt(idx))) ;
35- boolean isExists = false ;
30+ // boolean isExists = false ;
31+ isVisited [ y ][ x ] = true ;
3632 for (int dir = 0 ; dir < 4 ; dir ++) {
3733 int ny = y + dy [dir ];
3834 int nx = x + dx [dir ];
@@ -41,11 +37,12 @@ private boolean isWordExists(char[][] board, boolean[][] isVisited, String word,
4137 && !isVisited [ny ][nx ]
4238 && word .charAt (idx + 1 ) == board [ny ][nx ]) {
4339 isVisited [ny ][nx ] = true ;
44- isExists = isExists || isWordExists (board , isVisited , word , ny , nx , idx + 1 );
40+ if ( isWordExists (board , isVisited , word , ny , nx , idx + 1 )) return true ;
4541 isVisited [ny ][nx ] = false ;
4642 }
4743 }
48- return isExists ;
44+ isVisited [y ][x ] = false ;
45+ return false ;
4946 }
5047}
5148
0 commit comments