leetcode
来源:互联网 发布:java android sdk 编辑:程序博客网 时间:2024/06/16 09:10
Quetion 79– Word Search
给定一个字符表和一个字符串,判断能否用相邻的字符连接起来形成该字符串。
算法
对每个表中的字符进行一遍DFS。在每次DFS的过程中,记录当前访问过的节点,以免重复访问。若能找到则返回true;否则返回false。
Code
class Solution {public: bool exist(vector<vector<char>>& board, string word) { int nowpos = 0, rows = board.size(), cols = board[0].size(), wsize=word.size(); for (int i = 0; i < rows; i++){ for (int j = 0; j < cols; j++){ vector<vector<bool>> passed(rows, vector<bool>(cols, false)); if(dfsrecurtive(board, i, j, rows, cols, nowpos, word, passed,wsize)==wsize) return true; } } return false; } int dfsrecurtive(vector<vector<char>> &board, int row, int col, int rows, int cols, int nowpos, string& word, vector<vector<bool>>& passed, int wsize){ if(board[row][col]!=word[nowpos]) return -1; if(board[row][col]==word[nowpos]) nowpos++; if(nowpos==wsize) return nowpos; for(auto d: dr){ int newrow = row + d[0], newcol = col + d[1]; if(newrow<0||newrow>=rows||newcol<0||newcol>=cols||passed[newrow][newcol]) continue; passed[row][col] = true; if(dfsrecurtive(board, newrow, newcol, rows, cols, nowpos, word, passed,wsize)==wsize) return wsize; passed[row][col] = false; } return -1; } private: vector<vector<int>> dr{{0, -1}, {-1, 0}, {0, 1}, {1, 0}}; //代表四个方向,左上右下};
阅读全文
0 0
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- STL的reserve和resize
- 第十二周项目1Prim算法的验证
- 日本西粟仓村政府计划发起ICO,振兴地方经济
- 网络请求重定向
- iOS 图片涂鸦功能
- leetcode
- php读取富文本编辑器编辑后的文章内容,并去除所有html标签、空格以及空白,截取字符串(包括中文)
- LeetCode--Maximum Depth of Binary Tree
- 读懂正则表达式就这么简单
- C#算法系列(2)——线索二叉树
- 因子分解
- 第十三周项目一(3)——验证二叉排序树相关算法
- 阿里云配置tomcat后外网不能访问的问题
- JAVA Maven SpringMVC Mybatis bootstrap信息(增删改查分页)实战