@@ -40,7 +40,7 @@ public boolean exist(char[][] board, String word) {
40
40
41
41
for (int i = 0 ; i < m ; i ++) {
42
42
for (int j = 0 ; j < n ; j ++) {
43
- if (word . charAt ( 0 ) == board [ i ][ j ] ) {
43
+ if (checkIsCharacterSuitable ( board , i , j , word , 0 ) ) {
44
44
boolean [][] visited = new boolean [m ][n ];
45
45
visited [i ][j ] = true ;
46
46
@@ -58,50 +58,38 @@ private boolean findNextCharacter(char[][] board, int i, int j, String word, int
58
58
return true ;
59
59
}
60
60
61
- var m = board .length ;
62
- var n = board [0 ].length ;
61
+ if (checkNewPos (board , i - 1 , j , word , pos , visited )) {
62
+ return true ;
63
+ }
64
+ if (checkNewPos (board , i , j - 1 , word , pos , visited )) {
65
+ return true ;
66
+ }
67
+ if (checkNewPos (board , i + 1 , j , word , pos , visited )) {
68
+ return true ;
69
+ }
70
+ if (checkNewPos (board , i , j + 1 , word , pos , visited )) {
71
+ return true ;
72
+ }
63
73
64
- if (i > 0 && !visited [i - 1 ][j ]) {
65
- if (checkIsCharacterSuitable (board , i - 1 , j , word , pos )) {
66
- visited [i - 1 ][j ] = true ;
67
- if (findNextCharacter (board , i - 1 , j , word , pos + 1 , visited )) {
68
- return true ;
69
- }
74
+ return false ;
75
+ }
70
76
71
- visited [i - 1 ][j ] = false ;
72
- }
73
- }
74
- if (j > 0 && !visited [i ][j - 1 ]) {
75
- if (checkIsCharacterSuitable (board , i , j - 1 , word , pos )) {
76
- visited [i ][j - 1 ] = true ;
77
- if (findNextCharacter (board , i , j - 1 , word , pos + 1 , visited )) {
78
- return true ;
79
- }
77
+ private boolean checkNewPos (char [][] board , int i , int j , String word , int pos , boolean [][] visited ) {
78
+ var m = board .length ;
79
+ var n = board [0 ].length ;
80
80
81
- visited [ i ][ j - 1 ] = false ;
82
- }
81
+ if ( i < 0 || j < 0 || i >= m || j >= n ) {
82
+ return false ;
83
83
}
84
- if (i < m - 1 && !visited [i + 1 ][j ]) {
85
- if (checkIsCharacterSuitable (board , i + 1 , j , word , pos )) {
86
- visited [i + 1 ][j ] = true ;
87
- if (findNextCharacter (board , i + 1 , j , word , pos + 1 , visited )) {
88
- return true ;
89
- }
90
84
91
- visited [i + 1 ][j ] = false ;
85
+ if (!visited [i ][j ] && checkIsCharacterSuitable (board , i , j , word , pos )) {
86
+ visited [i ][j ] = true ;
87
+ if (findNextCharacter (board , i , j , word , pos + 1 , visited )) {
88
+ return true ;
92
89
}
93
- }
94
- if (j < n - 1 && !visited [i ][j + 1 ]) {
95
- if (checkIsCharacterSuitable (board , i , j + 1 , word , pos )) {
96
- visited [i ][j + 1 ] = true ;
97
- if (findNextCharacter (board , i , j + 1 , word , pos + 1 , visited )) {
98
- return true ;
99
- }
100
90
101
- visited [i ][j + 1 ] = false ;
102
- }
91
+ visited [i ][j ] = false ;
103
92
}
104
-
105
93
return false ;
106
94
}
107
95
0 commit comments