当前位置:网站首页>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;
}
边栏推荐
- 【集训DAY5】快速排序【模拟】【数学】
- CST Studio Suite 2021 software installation package and installation tutorial
- The technical aspects of the byte have been passed, and the salary has been negotiated for 20K*13, but the result is still being brushed. I asked the HR why...
- GoLang 使用 goroutine 停止的几种办法
- ECCV 2022 | 微软开源TinyViT :搞定小模型的预训练能力
- 【集训DAY3】中位数
- Tensor flow 踩坑记
- 【Infiltration tool】Browser data export tool
- WPF DataGrid 使用数据模板
- 工程 (七) ——PolarSeg点云语义分割
猜你喜欢
随机推荐
Creo5.0 introductory tutorial free material
JVM Memory and Garbage Collection - 10. Direct Memory
深入理解Aarch64内存管理
ES6 Beginner to Mastery #13: Extension Methods for Arrays 2
NTP SERVICE TASK 在GWserver配置、启用NTP服务,为当前环境提供时钟同步服务,Client主机可以从该服务器同步时间。
CST Studio Suite 2021软件安装包和安装教程
分布式数据库难题(二):数据复制
FreeRTOS任务基础
ES6 从入门到精通 # 15:生成器 Generator 的用法
ETCD快速入门-02 ETCD安装
redis分布式锁代码示例
错误提示:Syntax error on token “function”, delete this token
解锁时间生成与比较
Description of AirFlow
【SSL集训DAY2】有趣的数【数位DP】
ECCV 2022 | Microsoft Open Source TinyViT: Pre-training Capabilities for Small Models
RebatMq消息中间件(一) 各个中间件介绍
【集训DAY3】中位数
【SSL集训DAY2】Sequence【数学】
程序员从佩洛西窜访事件中可以学到什么?









