[leetcode] 79. Word Search 解题报告
2016-06-03 03:52
387 查看
题目链接: https://leetcode.com/problems/word-search/
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 =
word =
-> returns
word =
-> returns
word =
-> returns
思路: 依然是个DFS, 需要注意的是要标记访问过的位置, 并且当搜索完以后返回要将其标记设置为未访问.
代码如下:
class Solution {
public:
bool DFS(vector<vector<char>>& board, vector<vector<bool>>& hash, string& word, int y, int x, int k)
{
if(k >= word.size()) return true;
int m = board.size(), n = board[0].size();
if(y<0 ||y>=m ||x<0 ||x>=n||hash[y][x]||board[y][x]!=word[k]) return false;
hash[y][x] = true;
if(DFS(board, hash, word, y+1, x, k+1)) return true;
if(DFS(board, hash, word, y-1, x, k+1)) return true;
if(DFS(board, hash, word, y, x+1, k+1)) return true;
if(DFS(board, hash, word, y, x-1, k+1)) return true;
hash[y][x] = false;
return false;
}
bool exist(vector<vector<char>>& board, string word) {
if(board.size() ==0) return false;
int m = board.size(), n = board[0].size();
vector<vector<bool>> hash(m, vector<bool>(n, false));
for(int i =0; i< m; i++)
for(int j =0; j<n; j++)
if(DFS(board, hash, word, i, j, 0)) return true;
return false;
}
};
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.
思路: 依然是个DFS, 需要注意的是要标记访问过的位置, 并且当搜索完以后返回要将其标记设置为未访问.
代码如下:
class Solution {
public:
bool DFS(vector<vector<char>>& board, vector<vector<bool>>& hash, string& word, int y, int x, int k)
{
if(k >= word.size()) return true;
int m = board.size(), n = board[0].size();
if(y<0 ||y>=m ||x<0 ||x>=n||hash[y][x]||board[y][x]!=word[k]) return false;
hash[y][x] = true;
if(DFS(board, hash, word, y+1, x, k+1)) return true;
if(DFS(board, hash, word, y-1, x, k+1)) return true;
if(DFS(board, hash, word, y, x+1, k+1)) return true;
if(DFS(board, hash, word, y, x-1, k+1)) return true;
hash[y][x] = false;
return false;
}
bool exist(vector<vector<char>>& board, string word) {
if(board.size() ==0) return false;
int m = board.size(), n = board[0].size();
vector<vector<bool>> hash(m, vector<bool>(n, false));
for(int i =0; i< m; i++)
for(int j =0; j<n; j++)
if(DFS(board, hash, word, i, j, 0)) return true;
return false;
}
};
相关文章推荐
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- win2003分布式文件系统(dfs)配置方法[图文详解]
- win2003分布式文件系统及其部署 图文教程
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- Hadoop2.6+jdk8的安装部署(1)——使用jar包安装部署【详细】
- Hadoop FS Shell
- DFS使用方法总结
- leetcode----Longest Substring Without Repeating Characters
- FastDFS注意事项
- 无忧技术带您预览DFS(分布式文件系统)管理控制台
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap