Given a 2D board and a word, find if the word exists in the grid.數組
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.spa
For example,
Given board =code
[ ["ABCE"], ["SFCS"], ["ADEE"] ]
解題思路: 相似於迷宮,遞歸回溯。須要一個輔助數組記錄走過的位置,防止同一個位置被使用屢次。
public class Solution { public boolean exist(char[][] board, String word) { if(word==null){ return true; } boolean bool[][]=new boolean[board.length][board[0].length]; for(int i=0;i<board.length;i++){ for(int j=0;j<board[i].length;j++){ bool[i][j]=false; } } for(int i=0;i<board.length;i++){ for(int j=0;j<board[i].length;j++){ if(board[i][j]==word.charAt(0)){ bool[i][j]=true; if(search(board,word.substring(1),i,j,bool))//注意:當search返回false時,還要繼續遍歷,記得把bool置爲false return true; else bool[i][j]=false; } } } return false; } boolean search(char[][] board,String word,int i,int j,boolean[][]bool){ if(word.length()==0) return true;//判斷條件根據length,不是null int [][]director={{-1,0},{1,0},{0,-1},{0,1}};//此處很是有技巧,表明四個方向 for(int k=0;k<director.length;k++){ int ii=i+director[k][0]; int jj=j+director[k][1]; if(ii>=0&&ii<board.length&&jj>=0&&jj<board[0].length){ if(board[ii][jj]==word.charAt(0)&&bool[ii][jj]==false){ bool[ii][jj]=true; if(search(board,word.substring(1),ii,jj,bool)) return true; else bool[ii][jj]=false; } } } return false; } }