79. 单词搜索
2023-04-18 16:11:49 时间
思路:
回溯法,每次由一个点向上下左右递归 注意的点:
- 1、结束标志,点超出区域或者当前扫描的位置已经到单词最后一个索引位置了
- 2、由于我们每次要进行点的上下左右遍历,我们要记录一下每条路上递归我们已经使用的点,这些点不能重复使用
代码:
class Solution {
private int rows;
private int cols;
private int wordLength;
private boolean[][] hasUse;
private char[] charArray;
private char[][] board;
public boolean exist(char[][] board, String word) {
rows = board.length;
if (rows == 0) {
return false;
}
cols = board[0].length;
wordLength = word.length();
charArray = word.toCharArray();
hasUse = new boolean[rows][cols];
this.board = board;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (dfs(i, j, 0)) {
return true;
}
}
}
return false;
}
private boolean dfs(int i, int j, int currCharIndex) {
//判断是否已使用,是否点在区域内
if (!isArea(i, j)||hasUse[i][j]){
return false;
}
//结束条件
if (currCharIndex == wordLength - 1) {
return board[i][j] == charArray[currCharIndex];
}
if (board[i][j] == charArray[currCharIndex]) {
//上下左右的尝试
hasUse[i][j] = true;
boolean res = dfs(i + 1, j, currCharIndex + 1) || dfs(i - 1, j, currCharIndex + 1)
|| dfs(i, j + 1, currCharIndex + 1) || dfs(i, j - 1, currCharIndex + 1);
if (res) {
return true;
}
hasUse[i][j] = false;
}
return false;
}
private boolean isArea(int i, int j) {
return i >= 0 && i < rows && j >= 0 && j < cols;
}
}
相关文章
- 007:Django Cookie Session
- 010:Django高级模型
- 013:Django商城项目规划与环境搭建
- 014:Django商城项目静态文件修改
- 015:Django商城项目表单处理
- 016:Django商城短信和邮箱注册
- 017:Django商品详情页、富文本编辑器
- Linkerd,其实也很 “前景”的
- 001:网络爬虫基础理论整合
- 002:Python爬虫Urllib库全面分析
- 003:Python正则表达式讲解及习题练习
- 2022年8种高级威胁预测出炉、FBI就零日漏洞发出警报|11月22日全球网络安全热点
- 004:Python爬虫实战 由易到难(图文解析)
- 006:开启Scrapy爬虫项目之旅
- 007:Scrapy核心架构和高级运用
- 008:Http协议详解
- 009:博客类爬虫项目实战
- 用腾讯云轻量服务器搭建一个漂亮的导航主页
- 010:图片类爬虫项目实战
- 012:tkinter+爬虫设计对联软件