一天一大 lee(单词搜索)难度:简单-Day20200913
时间:2022-07-25
本文章向大家介绍一天一大 lee(单词搜索)难度:简单-Day20200913,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
给定 word = "ABCCED", 返回 true
给定 word = "SEE", 返回 true
给定 word = "ABCB", 返回 false
提示:
- board 和 word 中只包含大写和小写英文字母。
- 1 <= board.length <= 200
- 1 <= board[i].length <= 200
- 1 <= word.length <=
抛砖引玉
抛砖引玉
思路
- 先找到单词的起点
- 多位置与起点相同时可以使用数组或者递归记录逐个尝试
- 根据单词的顺序(起点后的单词)决定单词相邻方向
- 此时需要记录前面被选择的单词避免重复选择
- 存放多个方向满足要求是可以使用数组或者递归记录逐个尝试
- 匹配到最后一个字符返回true
- 多个起点和后续多个匹配位置的逻辑是相似的,可以使用递归遇到一个满足条件的元素就开启一个新的递归来去匹配
- 记录前面已经被选择的元素(当前组合内已被选择的元素)
/**
* @param {character[][]} board
* @param {string} word
* @return {boolean}
*/
var exist = function(board, word) {
let dir = [[0, 1], [0, -1], [1, 0], [-1, 0]],
len = word.length,
m = board.length,
n = board[0]?board[0].length:0,
visited = new Array(m);
// 初始化记录选择矩阵
for (let i = 0; i <m; ++i) {
visited[i] = Array(n).fill(false);
}
// 枚举起点
for(let i = 0;i<m;i++){
for(let j = 0;j<n;j++){
if(board[i][j] === word[0] && helper(0,[i,j])){
return true
}
}
}
// 匹配字符指针 上一个匹配上的位置坐标
function helper(index,[x,y]) {
let _result = false;
if(index === len-1) return true;
// 上一个匹配坐标标记已选
visited[x][y] = true
for (let [dx, dy] of dir) {
let nx = x + dx, ny = y + dy;
if (nx >= 0 && nx < m && ny >= 0 && ny < n) {
if (!visited[nx][ny]) {
if (board[nx][ny] === word[index+1] && helper(index + 1,[nx, ny])) {
_result = true;
break;
}
}
}
}
// 上一个匹配坐标起,枚举匹配一种组合完成恢复选择状态(可能其他组合需要使用改坐标完成匹配)
visited[x][y] = false;
return _result;
}
// 上面逻辑为查找到满足条件的组合,返回false
return false
};
- 不用synchronized块的话如何实现一个原子的i++?
- Oracle升级中的参数补充(r9笔记第2天)
- 【Go 语言,服务器模块】日志系统源码
- wait方法和sleep方法的区别
- Java面试系列10
- python django整理(三)页面基础(仿BBS)
- 高并发场景下的httpClient优化使用
- socket.io 相关:Example: A simple chat server(官方 实例)
- django整理(四)配置setting文件(CSS,JS,images,templates)路径
- idea 远程调试 tomcat web应用
- Java 中冷门的 synthetic 关键字原理解读
- Spring 数据库连接(Connection)绑定线程(Thread)的实现
- Golang语言实现AzDG可逆加密算法实例
- python django整理(五)配置favicon.ico,解决警告Not Found: /favicon.ico
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何免登陆观看b站大会员番剧
- 聊聊越来越火的对象存储
- AJAX的基本原理及实例解析。
- Docker私有镜像仓库是什么?
- React Native布局详细指南
- 走进Golang之Context的使用
- 「Workshop」第十一期:降维
- 开始在 GitHub 上写博客
- 微信公众号菜单点击发送天气预报
- SAP CRM Fiori应用如何启用Sales Office和Sales Group两个字段
- 通过注册表调整 Windows 8 窗口边框宽度
- 在 Mac OS X 中创建和使用内存盘
- Mono for Android 下的 ListActivity
- 使用JavaScript Function.prototype进行代码重构的一些例子
- Activity 生命周期及其栈管理方式