标签:12 return 递归 Offer dfs board words 回溯 false
文章目录
题目
思路
本题可以用搜索与回溯算法,本质上是递归,当遍历到当前元素时,递归遍历当前元素的上、左、下、右方元素
构造递归
1.边界条件
- 行列超出索引,返回false;
- 当前元素与字符串单词不符,返回false;
- 当前元素已经匹配到字符串单词最后一位,返回true;
2.递归处理
当当前元素与字符串单词相符,但是并没有匹配到最后一位时
- 将当前元素置为’ ',避免重复访问
- 递归访问当前元素的上、左、下、右方元素
- 将当前元素恢复
- 返回第2步的调用结果(四个调用只要有一个true就返回true)
可能从矩阵中任意位置开始递归,所以用两个循环来开始递归。
故递归应包含一下参数:
- board 被比较的矩阵
- words 被比较的字符串
- i,j 当前行、列索引
- k 当前比较到字符串的第几个字符
代码
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(dfs(board,words,i,j,0)) return true;
}
}
return false;
}
boolean dfs(char[][] board, char[]words, int i, int j ,int k){
if(i<0 || i>=board.length) return false;
else if(j<0 || j>=board[0].length) return false;
else if(board[i][j] != words[k]) return false;
else if(k==words.length-1) return true;
else{
board[i][j]=' ';
boolean res = dfs(board,words,i+1,j,k+1) || dfs(board,words,i-1,j,k+1) || dfs(board,words,i,j-1,k+1) || dfs(board,words,i,j+1,k+1);
board[i][j] = words[k];
return res;
}
}
}
标签:12,return,递归,Offer,dfs,board,words,回溯,false 来源: https://blog.csdn.net/qq_38939822/article/details/123638439
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。