leetcode题解-79. Word Search
来源:互联网 发布:网络平台运营成本预算 编辑:程序博客网 时间:2024/04/28 12:31
题目:
Given a 2D board and a word, find if the word exists in the grid.The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.For example,Given board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]word = "ABCCED", -> returns true,word = "SEE", -> returns true,word = "ABCB", -> returns false.
本题是从一个board中寻找一个单词,很容易想到深度遍历的方法,但是如何解决不能重复使用这一限制条件呢,我们可以使用额外的空间来标识,也可以使用两次亦或操作,第一次表明该字符不可用,第二次在使之可用即可。代码入下:
public boolean exist(char[][] board, String word) { if (word == null || word.length() == 0) { return true; } char[] chs = word.toCharArray(); //遍历面板所有字符 for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { //dfs判断是否满足题目要求 if(dfs(board, chs, 0, i, j)) { return true; } } } return false; } private boolean dfs(char[][] board, char[] words, int idx, int x, int y) { //如果idx==单词长度则说明已经找到了完整的单词,返回真 if (idx == words.length) { return true; } //如果下标越界,返回假 if (x < 0 || x == board.length || y < 0 || y == board[0].length) { return false; } //如果遍历的字符不等于单词中对应位置的字符,返回假 if (board[x][y] != words[idx]) { return false; } //亦或操作,是现在判断的字符不可用,以免被重复使用 board[x][y] ^= 256; //递归调用,判断该字符串前后左右四个字符是否满足条件,有一个为真即可继续递归调用判断单词的下一个字符 boolean exist = dfs(board, words, idx + 1, x, y + 1) || dfs(board, words, idx + 1, x, y - 1) || dfs(board, words, idx + 1, x + 1, y) || dfs(board, words, idx + 1, x - 1, y) ; //再次亦或使该字符可用 board[x][y] ^= 256; return exist; }
0 0
- leetcode题解-79. Word Search
- LeetCode题解:Word Search
- 【leetcode题解】2 - Word Search
- LeetCode 题解(10):Word Search
- LeetCode 题解(92): Word Search II
- LeetCode 79. Word Search
- [LeetCode]79.Word Search
- LeetCode --- 79. Word Search
- [Leetcode] 79. Word Search
- [leetcode] 79.Word Search
- 【leetcode】79. Word Search
- [LeetCode]79. Word Search
- 79. Word Search LeetCode
- leetcode 79. Word Search
- LeetCode 79. Word Search
- LeetCode 79. Word Search
- leetcode 79. Word Search
- LeetCode *** 79. Word Search
- 蓝牙解析(part11):BLE SM(4):低功耗安全连接(SC):数值比较
- es6学习笔记4-解构赋值
- C++ tinyxml处理XML文件
- SpringMVC工作原理
- 第七章 7-2 Checker
- leetcode题解-79. Word Search
- 循环
- u-boot启动过程之STEP1
- 1
- JavaScript模拟函数重载
- [Leetcode]_18 4Sum
- 2
- 机器学习-决策树 ID3算法
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)