给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。

示例:

输入: 
words = ["oath","pea","eat","rain"] and board =
[
  ['o','a','a','n'],
  ['e','t','a','e'],
  ['i','h','k','r'],
  ['i','f','l','v']
]

输出: ["eat","oath"]
说明:
你可以假设所有输入都由小写字母 a-z 组成。

思路:上一道题改一下,把每一个单词都判断一下即可。


class Solution {private boolean[][] marked;//        x-1,y// x,y-1  x,y    x,y+1//        x+1,yprivate int[][] direction = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};// 盘面上有多少行private int m;// 盘面上有多少列private int n;private String word;private char[][] board;//答案数组Set<String> ans=new HashSet<>();//判断一个字符public List<String> findWords(char[][] board, String[] words) {m = board.length;if (m == 0)return null;n = board[0].length;marked = new boolean[m][n];this.board = board;for(String s:words){for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)marked[i][j]=false;this.word = s;for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)if (dfs(i, j, 0))ans.add(s);}List<String> ansList=new ArrayList<>(ans);Collections.sort(ansList);return ansList;}private boolean dfs(int i, int j, int start) {if (start == word.length() - 1) {return board[i][j] == word.charAt(start);}if (board[i][j] == word.charAt(start)) {marked[i][j] = true;for (int k = 0; k < 4; k++) {int newX = i + direction[k][0];int newY = j + direction[k][1];if (newX >= 0 && newX < m && newY >= 0 && newY < n && !marked[newX][newY]) {if (dfs(newX, newY, start + 1)) {return true;}}}marked[i][j] = false;}return false;}
}

leetcode212. 单词搜索 II相关推荐

  1. [Swift]LeetCode212. 单词搜索 II | Word Search II

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

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

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

  3. leetcode: 212. 单词搜索II

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

  4. 单词搜索 II(python)

    212. 单词搜索 II 题目描述 解题思路 代码 时间复杂度分析 题目描述 ➡ 题目链接 ⬅ 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维 ...

  5. Leetcode系列-字符串-单词搜索II

    单词搜索II理解与分析 题目大意(原题参见leetcode官网) 给定一个单词列表和二维字符网格,找到网格中所有存在于单词列表中的单词并返回.单词与网格中都只包含小写字母. 解题思路 方法一(效率低, ...

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

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

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

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

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

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

  9. leetcode 212:单词搜索II

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

最新文章

  1. 简易django项目之登录验证
  2. 语言堆栈入门——堆和栈的区别
  3. python PyQt5 sender(是发出信号的对象)、receiver(接收信号的对象)、slot(插槽)(是对信号做出反应的方法)
  4. VS2008文档自动生成
  5. java 静态 编译_Java中的动态和静态编译
  6. MongoDB 复制集(Replica Set) 配置(Windows 版)
  7. 原理图端口符号_电气原理图与接线图的区别和联系
  8. python基础教程十进制_Python基础教程(四)
  9. After Effects - Bodymovin 插件验货及感受
  10. 苹果手机密码设置在哪里_oppo怎么设置SIM密码-oppo手机SIM卡密码设置详细教程
  11. linux lefse分析,LEfSe分析,你真的懂了么
  12. css 实现一个尖角_请用CSS实现一个带尖角的正方形
  13. JavaScript常见面试题
  14. 完全平方公式用c语言表达式,完全平方公式教案
  15. 如何获得当前所在的DLL模块名称
  16. HTML5+CSS3之快速入门 day6-day10布局,表单,css精灵,css hack,BFC规范
  17. Gensim库生成与导入W2V模型_CodingPark编程公园
  18. Mysql内查询时报错,错误代码: 1146
  19. 一年大约有3.1536*107s。编写一个程序,要求 输入你的年龄,然后显示该年龄等于多少秒。
  20. Java类包的定义(package)

热门文章

  1. 手写tomcat socket closed_【消费电子】:重在阅读,新增手写 BOOX Nova Pro 体验评测...
  2. go java性能_服务端I/O性能大比拼:Node、PHP、Java和Go
  3. linux下c 编译脚本,Linux下编译C语言与makefile脚本语言
  4. 六西格玛dfss_六西格玛系列知识之二:六西格玛管理的基本原理
  5. SELECT的学习以及在socket中的应用
  6. 南科大计算机系实力a,五大竞赛学科A+高校排行榜发布!北大实力碾压,科大赶超清华...
  7. python 计算协方差矩阵_opencv2学习:计算协方差矩阵
  8. 平台系统云服务器配置,01-云平台连接配置
  9. 一步步编写操作系统 10 cpu的实模式
  10. js脚本点击按钮显示文字_JSBOX脚本聊天神器