@@ -39,7 +39,7 @@ private boolean inArea(char[][] board, int i, int j) {
3939 return (i >= 0 && j >= 0 && i < board .length && j < board [i ].length );
4040 }
4141 // 解法2 (简洁)
42- private boolean backtracking (char [][] board , int i , int j , String word , int charPos ) {
42+ private boolean backtrackingOld (char [][] board , int i , int j , String word , int charPos ) {
4343 char c = board [i ][j ];
4444 if (charPos == word .length () - 1 ) return c == word .charAt (charPos );
4545 if (c == '#' || c != word .charAt (charPos )) return false ;
@@ -51,6 +51,21 @@ private boolean backtracking(char[][] board, int i, int j, String word, int char
5151 board [i ][j ] = c ;
5252 return false ;
5353 }
54+ // 最好的写法
55+ private boolean backtracking (char [][] board , int i , int j , String word , int charPos ) {
56+ if (charPos == word .length ()) return true ;
57+ // 将判断移到此处来
58+ if (i < 0 || j < 0 || i >= board .length || j >= board [0 ].length ) return false ;
59+ char c = board [i ][j ];
60+ if (c == '#' || c != word .charAt (charPos )) return false ;
61+ board [i ][j ] = '#' ;
62+ if (backtracking (board , i -1 , j , word , charPos +1 )) return true ;
63+ if (backtracking (board , i , j -1 , word , charPos +1 )) return true ;
64+ if (backtracking (board , i +1 , j , word , charPos +1 )) return true ;
65+ if (backtracking (board , i , j +1 , word , charPos +1 )) return true ;
66+ board [i ][j ] = c ;
67+ return false ;
68+ }
5469
5570 public boolean exist (char [][] board , String word ) {
5671 if (board == null || board .length == 0 || word == null || word .length () == 0 ) return false ;
0 commit comments