本文共 945 字,大约阅读时间需要 3 分钟。
矩阵搜索类题目,可以使用dfs递归查找;
dfs函数作用:返回在矩阵board中,是否存在一个字符串数组word,从第i行j列开始逐个匹配word的每一个元素,若存在返回true,反之返回false;
结束条件:行列超出界限,改元素之前访问过
返回值:对元素上下左右进行递归查找,取其或的布尔结果;
小操作:在子问题的操作上还要考虑一点,我们使用直接修改值的方式来表示矩阵元素已经被访问过,之后递归如果不想受到影响,还需要在得到res结果后复原该位置的元素值,为了下次递归能够访问。 board[i][j] = word[k];
class Solution { public boolean exist(char[][] board, String word) { char[] words = word.toCharArray(); for(int i=0;i= board.length || i < 0 || j < 0 || j >=board[0].length || board[i][j] != word[k]) return false; // 查找成功说明当前字符的索引是word最后一个值的索引 if(k == word.length - 1) return true; // 标记已访问过元素,可以是除了字母外的其他元素 board[i][j] = '8'; // 上下左右的递归去寻找,只要一个true就可以返回。 boolean res = dfs(board,word,i+1,j,k+1) || dfs(board,word,i-1,j,k+1) || dfs(board,word,i,j+1,k+1) || dfs(board,word,i,j-1,k+1); // dfs 之后要还原,不然之后的递归找个锤子 board[i][j] = word[k]; return res; }}
转载地址:http://gsozi.baihongyu.com/