当前位置:网站首页>Leetcode79. 单词搜索
Leetcode79. 单词搜索
2022-08-09 23:32:00 【Java全栈研发大联盟】
题目传送地址: https://leetcode.cn/problems/word-search/submissions/
运行效率:
代码如下:
//回溯法,递归
public static boolean exist(char[][] board, String word) {
HashSet<String> set = new HashSet<>();
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (board[i][j] == word.charAt(0)) {
if (recur(i, j, board, word, 0, set)) {
return true;
}
}
}
}
return false;
}
//注意要在recur函数的开头set.add(row + ":" + col); 且在结尾要 set.remove(row + ":" + col); 这才是回溯的状态的还原
public static boolean recur(int row, int col, char[][] board, String word, int k, HashSet<String> set) {
//处理边界情况
if (k == word.length() - 1) {
if (board[row][col] == word.charAt(k)) {
set.add(row + ":" + col);
return true;
}
return false;
}
if (board[row][col] != word.charAt(k)) {
return false;
}
//当前坐标的元素能不能成为贪吃蛇的蛇头, 取决于左、右、下 三个位置的情况
boolean bottom;
boolean left;
boolean right;
boolean top;
set.add(row + ":" + col);
boolean result = false;
//下边相邻的坐标
if (row + 1 < board.length && !set.contains((row + 1) + ":" + col)) {
bottom = recur(row + 1, col, board, word, k + 1, set);
if (bottom) {
result = true;
}
}
//左边相邻的坐标
if (col - 1 >= 0 && !set.contains(row + ":" + (col - 1))) {
left = recur(row, col - 1, board, word, k + 1, set);
if (left) {
result = true;
}
}
//右边相邻的坐标
if (col + 1 < board[0].length && !set.contains(row + ":" + (col + 1))) {
right = recur(row, col + 1, board, word, k + 1, set);
if (right) {
result = true;
}
}
//上边相邻的坐标
if (row - 1 >= 0 && !set.contains((row - 1) + ":" + col)) {
top = recur(row - 1, col, board, word, k + 1, set);
if (top) {
result = true;
}
}
set.remove(row + ":" + col);
return result;
}
边栏推荐
猜你喜欢
随机推荐
NotWritableError: The current user does not have write permissions when conda creates a new environment
算法---整数替换(Kotlin)
conda新建环境时报错NotWritableError: The current user does not have write permissions
AUTOCAD——形位公差如何标注、CAD打断于点的操作
字节技术面都过了,薪资都谈好了20K*13结果还是被刷了,问HR原因是。。。
生成树和交换的总结
基于 LSTM 的分布式能源发电预测(Matlab代码实现)
为什么不建议你在 Docker 中跑 Mysql ?
【渗透工具】浏览器数据导出工具
Creo5.0入门教程赠素材
如何抑制告警风暴?
ECCV 2022 | 微软开源TinyViT :搞定小模型的预训练能力
【剑指offer】第一题 第二题
【SSL集训DAY3】控制棋盘【二分图匹配】
YOLOV5学习笔记(七)——训练自己数据集
const修饰指针的三种情况
MATLB|And her ups and downs and finally reached the peak of life [Romantic Journey]
JVM内存和垃圾回收-10.直接内存
KingbaseGIS Jin Cang database using manual (6.3. Geometric object creation function)
数字孪生智慧制造生产线项目实施方案,平台认知与概念









