一天一大 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
};
- HLS Lesson16-数组优化:数组分割
- HLS Lesson15-for循环优化:其他方法
- 对自己的上网搜索记录进行爬虫是怎样一种体验
- HLS Lesson13-for循环优化:合并
- HLS Lesson12-for循环优化:基本性能指标
- HLS Lesson11-c/c++ testbench书写续2
- 【机器学习】实例详解机器学习如何解决问题
- 企业网站架构之Nginx+tomcat+memcached集群
- 企业级Docker Registry开源工具Harbor的介绍以及使用指南
- HLS Lesson8-基本操作
- Windows渗透测试工具:RedSnarf
- HLS Lesson7-复合数据类型
- matlab GUI基础3
- 【Python环境】《Python数据科学入门》试译 第一章 简介
- 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 数组属性和方法
- Vim中宏命令的使用实例详解
- 在CentOS搭建Git服务器的详细步骤
- CentOS使用EPEL源的方法步骤
- VirtualBox 错误:This kernel requires the following features not present on the CPU
- keepalived实现nginx高可用
- LINUX中详解AWK内建变量FS,NF,NR,RT,RS,ORS,OFS
- Centos7安装配置NFS服务和挂载教程(推荐)
- 轻松搞定VIM高亮NGINX配置文件的方法
- CentOS7 下安装telnet服务的实现方法
- Linux内核启动参数详解
- CentOS6.3添加nginx系统服务的实例详解
- Linux中在防火墙中开启80端口方法示例
- Apache 获取真实ip的配置的实现方法
- Linux下文件的切分与合并的简单方法介绍
- ubuntu 系统上为php加上redis 扩展的实现方法