public class Find2 {public int[] dx={1,-1,0,0};public int[] dy={0,0,1,-1};class Trie{Trie[] tries;String isEnd;public Trie(){tries = new Trie[26];}}public boolean[][] vis;    //是否判断过public List<String> res;    //答案public void insert(String word, Trie root){Trie t = root;for(int i = 0;i < word.length();i++){int index = word.charAt(i)-'a';if(t.tries[index] == null){t.tries[index] = new Trie();}t = t.tries[index];//跳到子节点}t.isEnd = word;}public List<String> findWords(char[][] board, String[] words) {//先把单词存入字典树当中Trie root=new Trie();for(String word:words){insert(word,root);}res=new ArrayList<String>();vis=new boolean[board.length][board[0].length];for(int i=0;i<board.length;++i){  //对board每一个点都进行检索for(int j=0;j<board[i].length;++j){dfs(root,i,j,board);}}Collections.sort(res);  //需要对结果进行排序return new ArrayList<String>(res);}public void dfs(Trie cur,int x,int y,char[][] board){//判断边界if(x<0||y<0||x>=board.length||y>=board[0].length||vis[x][y]){return;}cur=cur.tries[board[x][y]-'a'];  //延伸下一个节点vis[x][y]=true; //把当前设置为走过 不可重复走if(cur!=null){ //如果当前不为null的话 可以继续检索if(cur.tries!=null){ //说明到这里已经可以组成一个单词了res.add(cur.isEnd);cur.tries=null; //变成null是为了防止重复加入单词}for(int i=0;i<4;++i){dfs(cur,x+dx[i],y+dy[i],board); //四个方向检索}}vis[x][y]=false;}public static void main(String[] args) {String[] words ={"oath","pea","eat","rain"};char[][] board = {{'o', 'a', 'a', 'n'},{'e', 't', 'a', 'e'},{'i', 'h', 'k', 'r'},{'i', 'f', 'l', 'v'}};Solution m = new Solution();List<String> a = m.findWords(board,words);System.out.println(a.toString());}
}

Java实现 LeetCode 212 单词搜索 II相关推荐

  1. Java实现 LeetCode 212 单词搜索 II(二)

    212. 单词搜索 II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中&quo ...

  2. leetcode: 212. 单词搜索II

    212. 单词搜索II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/word-search-ii 给定一个 m x n 二维字符网格 board和 ...

  3. LeetCode 212. 单词搜索 II(Trie树+DFS)

    1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...

  4. leetcode 212. 单词搜索 II 字典树+深度优先搜索 java代码 详细解释

    给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格 ...

  5. 【亡羊补牢】挑战数据结构与算法 第19期 LeetCode 212. 单词搜索 II(字典树,附上JS模板)

    仰望星空的人,不应该被嘲笑 题目描述 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成, ...

  6. leetcode 212:单词搜索II

    题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其 ...

  7. 【每日一题】212. 单词搜索 II

    212. 单词搜索 II 题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻 ...

  8. Java实现 LeetCode 79 单词搜索

    79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...

  9. leetcode 212. Word Search II | 212. 单词搜索 II(Trie,回溯,DFS)

    题目 https://leetcode.com/problems/word-search-ii/ 题解 基于前缀树实现,如果把 Trie 也看做一个特殊的图的话,就是 将两个图同时进行 dfs,就像判 ...

最新文章

  1. 关于学习Python的一点学习总结(43->类中的方法重写)
  2. 进入Windows的世界
  3. VBS 自动发送邮件
  4. 卷积神经网络CNN(3)—— FCN(Fully Convolutional Networks)要点解释
  5. 为机场按上一双“慧眼”消灭飞机的“黑色十分钟”
  6. androidstuio实现页面跳转_vue-router 基础:4类路由跳转示例
  7. 算法不会,尚能饭否之排序——插入排序法(用链表实现)
  8. action中的动态方法调用
  9. udp广播收到重复包
  10. libc库和系统调用
  11. python读取dat文件代码-基于python批量处理dat文件及科学计算方法详解
  12. Ios html5游戏存档,ios存档怎么安装 不用电脑安装IOS存档图文教程
  13. 手机 机器人 谢超_大咖云集 长三角智造峰会演讲嘉宾名单曝光
  14. 用php搭建微信公众号淘客三合一系统
  15. linux上windows模拟器下载,Wine(Windows模拟器)下载_Wine(Windows模拟器)官方下载-太平洋下载中心...
  16. redhat 6.5安装oracle时出现java异常,redhat6.5 下安装 oracle11 报错
  17. python3删除重复文件,可用命令行
  18. 文献调研神器——Connected Papers
  19. [Vue]@keyup.enter不起作用
  20. NASA 选择 Qt 框架开发国际空间站应用

热门文章

  1. SQL语句左联、右联、内联的区别
  2. JS本地存储(附实例)
  3. webpack学习:性能优化
  4. springboot错误:Error starting ApplicationContext. To display the conditions report re-run your applica
  5. FRP免费通过外网访问本地电脑方法
  6. MVC\MVO 机制
  7. Python二分搜索算法
  8. Vue如何提交表单数据
  9. android method,Android 自定义插件-- 彻底解决method not found 问题
  10. 『带你学AI』一文带你搞懂OCR识别算法CRNN:解析+源码