题目:12. 矩阵中的路径
分析 借助一个辅助方法helper,传入的参数为board,word以及分别记录其元素位置的指针i、j,p;
判断i,j是否越界,字符是否匹配;以上没问题了,再看看是不是最后一个word字符了;将当前遍历的board元素暂时存放起来,其位置做个标记,表示已经访问过了;从该位置分别对四个方向递归搜索;递归完之后再将该位置的元素还原;思路: 遍历board中的元素,对每一个位置调用helper方法,只要有一处返回true,就结束。
代码:
class Solution { public boolean exist(char[][] board, String word) { char[] words = word.toCharArray(); for(int i = 0; i < board.length; i++){ for(int j = 0; j < board[0].length;j++){ if(helper(board,words,i,j,0)){ return true; } } } return false; } public boolean helper(char[][] board, char[] words, int i, int j, int p){ //是否越界或者字符不匹配 if(i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] != words[p]){ return false; } if(p == words.length - 1){ return true; } char tmp = board[i][j]; board[i][j] = '#'; boolean res = helper(board,words,i-1,j,p+1) || helper(board,words,i+1,j,p+1) || helper(board,words,i,j-1,p+1) || helper(board,words,i,j+1,p+1); board[i][j] = tmp; return res; } }