DFS回溯
leetcodeDFS(回溯)题型总结
ryontang
这个作者很懒,什么都没留下…
展开
-
回溯算法_字符分割
5520. 拆分字符串使唯一子字符串的数目最大主要思路:这一题是经典的dfs,你就不断的拆字符串,每一次拆到一个子串时加入unordered_set前,要检查是否重复,如果重复那就不加入,这个set起到了visited的作用用一个变量去搜索可能的答案,节省空间,当然要用到回溯了代码如下:class Solution{public: int ans; void solve(string &s, unordered_set<string> &st, int原创 2020-10-03 14:33:58 · 207 阅读 · 0 评论 -
回溯+DFS思考
首先是暴力搜索dfs, 如果需要做选择我们就加上回溯回溯的伪代码:494. 目标和暴力解法暴力解法就是dfs了,这道题而言,暴力解法是完全可以的,而且不会超时,因为题目中说了数组长度不会超过20,20个数字的序列,组合方式撑死了2^{20}种,算下来才1024 ×10241024×1024。。。也就是说,可以把数组中每个数字前面都用负号和正号,然后进行组合的求和,并判断这个和是否会等于S,然后就标记,最后统计出等于S的组合个数就好了。具体使用dfs,就是一个前序遍历二叉树的实现,递归地+原创 2020-09-04 18:00:08 · 254 阅读 · 0 评论 -
回溯算法_全排列
46. 全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列参考:liweiweiclass Solution{public: vector<vector<int>> permute(vector<int> &nums) { vector<vector<int>> result; if (nums.size() == 0) return result; // 递归的深度原创 2020-07-30 22:03:35 · 1347 阅读 · 0 评论 -
leecode岛屿问题总结DFS
关于岛屿问题的总结DFS 的基本结构网格结构要比二叉树结构稍微复杂一些,它其实是一种简化版的图结构。要写好网格上的 DFS 遍历,我们首先要理解二叉树上的 DFS 遍历方法,再类比写出网格结构上的 DFS 遍历。我们写的二叉树 DFS 遍历一般是这样的:void traverse(TreeNode root){ // 判断base case if(root == null) { return; } // 访问两个相邻结点:左子节点,右子节点 traverse(roo原创 2020-06-09 09:58:16 · 600 阅读 · 0 评论