DFS总结
总结bfs套路及题型
哆啦c梦~~
嵌入式开发小白
展开
-
LeetCode 756. 金字塔转换矩阵
原题链接: https://leetcode-cn.com/problems/pyramid-transition-matrix/题目描述现在,我们用一些方块来堆砌一个金字塔。 每个方块用仅包含一个字母的字符串表示。使用三元组表示金字塔的堆砌规则如下:对于三元组(A, B, C) ,“C”为顶层方块,方块“A”、“B”分别作为方块“C”下一层的的左、右子块。当且仅当(A, B, C)是被允许的三元组,我们才可以将其堆砌上。初始时,给定金字塔的基层 bottom,用一个字符串表示。一个允许的三元组原创 2020-10-06 15:49:05 · 135 阅读 · 0 评论 -
LeetCode 93. 复原IP地址(Medium)
原题链接:https://leetcode-cn.com/problems/restore-ip-addresses/题目描述给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1原创 2020-10-06 15:38:45 · 93 阅读 · 0 评论 -
LeetCode 301. 删除无效的括号(Hard) + 剪枝
原题链接: https://leetcode-cn.com/problems/remove-invalid-parentheses/题目描述删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明: 输入可能包含了除 ( 和 ) 以外的字符。示例 1:输入: “()())()”输出: ["()()()", “(())()”]示例 2:输入: “(a)())()”输出: ["(a)()()", “(a())()”]示例 3:输入: “)(”输出: [""]题解1原创 2020-10-06 14:29:24 · 129 阅读 · 0 评论 -
LeetCode 282. 给表达式添加运算符(Hard)
原题链接: https://leetcode-cn.com/problems/expression-add-operators/题目描述给定一个仅包含数字 0-9 的字符串和一个目标值,在数字之间添加二元运算符(不是一元)+、- 或 * ,返回所有能够得到目标值的表达式。示例 1:输入: num = “123”, target = 6输出: [“1+2+3”, “123”]示例 2:输入: num = “232”, target = 8输出: [“23+2", "2+32”]示例 3:原创 2020-10-06 13:31:13 · 190 阅读 · 0 评论 -
导弹防御系统(DFS迭代加深 + 剪枝)
原题链接: https://www.acwing.com/problem/content/189/题目描述为了对抗附近恶意国家的威胁,R国更新了他们的导弹防御系统。一套防御系统的导弹拦截高度要么一直 严格单调 上升要么一直 严格单调 下降。例如,一套系统先后拦截了高度为3和高度为4的两发导弹,那么接下来该系统就只能拦截高度大于4的导弹。给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。输入格式输入包含多组测试用例。对于每个测试用例,第一行包含整数n,表示转载 2020-10-06 11:23:46 · 224 阅读 · 0 评论 -
巴士(DFS迭代加深 + 剪枝)
原题链接: https://www.acwing.com/problem/content/188/题目描述一名男子在12:00抵达了某巴士站,并且在12:00-12:59期间他将在那里逗留。巴士站有很多巴士路线,巴士抵达的时间均已给出。该男子观察巴士的抵达时间,有所发现:1、在12:00 ~12:59 期间,同一线路上的巴士以相同的时间间隔到站。2、每条巴士线路至少有两辆车到达本站。3、不同线路的巴士可以同时到达本站。4、不同巴士线路的车首次到达本站的时间和到站的时间间隔都有可能相同。原创 2020-10-06 11:05:07 · 718 阅读 · 0 评论 -
送礼物(DFS双向搜索)
原题链接:https://www.acwing.com/problem/content/173/题目描述:达达帮翰翰给女生送礼物,翰翰一共准备了N个礼物,其中第i个礼物的重量是G[i]。达达的力气很大,他一次可以搬动重量之和不超过W的任意多个物品。达达希望一次搬掉尽量重的一些物品,请你告诉达达在他的力气范围内一次性能搬动的最大重量是多少。输入格式第一行两个整数,分别代表W和N。以后N行,每行一个正整数表示G[i]。输出格式仅一个整数,表示达达在他的力气范围内一次性能搬动的最大重量。数据原创 2020-10-06 10:10:48 · 210 阅读 · 0 评论 -
加成序列(DFS迭代加深)
原题链接:https://www.acwing.com/problem/content/172/题目描述:满足如下条件的序列X(序列中元素被标号为1、2、3…m)被称为“加成序列”:1、X[1]=12、X[m]=n3、X[1]<X[2]<…<X[m-1]<X[m]4、对于每个 k(2≤k≤m)都存在两个整数 i 和 j (1≤i,j≤k−1,i 和 j 可相等),使得X[k]=X[i]+X[j]。你的任务是:给定一个整数n,找出符合上述条件的长度m最小的“加成序列”。原创 2020-10-05 21:42:26 · 155 阅读 · 0 评论 -
木棒(DFS迭代加深)
原题链接:https://www.acwing.com/problem/content/169/题目描述乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。输入格式输入包含多组数据,每组数据包括两行。第一行是一个不超过64的整数,表示砍断之后共有多少节木棍。第二行是截断以后,所得到的原创 2020-10-05 20:51:04 · 231 阅读 · 0 评论 -
小猫爬山(DFS深搜)
原题链接:https://www.acwing.com/problem/content/167/题目描述翰翰和达达饲养了N只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。翰翰和达达只好花钱让它们坐索道下山。索道上的缆车最大承重量为W,而N只小猫的重量分别是C1、C2……CN。当然,每辆缆车上的小猫的重量之和不能超过W。每租用一辆缆车,翰翰和达达就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运原创 2020-10-05 19:47:28 · 173 阅读 · 0 评论 -
详解DFS求组合数 + 去重
文章目录无重复元素求组合数题目描述题解一题解二有重复元素求组合数题目描述题解一题解二参考:无重复元素求组合数题目描述从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。输入格式两个整数 n,m ,在同一行用空格隔开。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行内的数升序排列,相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 5 7排在1 3 6 8前面)。数据范围n>0 ,0≤m≤n原创 2020-10-05 19:15:28 · 1386 阅读 · 0 评论 -
DFS求全排列三种方法 +剪枝优化
文章目录题目描述一、DFS暴搜一(枚举法)二、DFS暴搜二(交换法)三、C++库函数四、进阶题虫食算全排列 + 剪枝蓝桥杯省赛题:寒假作业题目描述给定一个长度为 n 的可包含重复数字的序列,请你求出其所有不重复的全排列。输入格式第一行包含整数 n。第二行包含 n 个整数。输出格式输出所有的不同排列,每种排列占一行。在确定每种排列的输出顺序时,第一个数较小的先输出,第一个数相同时,第二个数较小的先输出,以此类推。数据范围1≤n≤9,数组中包含的元素的取值范围 [1,9]输入样例:3原创 2020-10-05 16:15:45 · 666 阅读 · 0 评论 -
DFS总结之隐式图上的深搜
文章目录前言一、DFS执行过程二、DFS思考过程1.搜索顺序2.回溯3.剪枝三、DFS常用模板(C++版)四、隐式图常见题型及解法五、参考:前言本文总结了一些常见的在隐式图上深搜的DFS题目一、DFS执行过程二、DFS思考过程1.搜索顺序DFS题目首先考虑搜索顺序,就是要找一种搜索顺序,能把各种情况都枚举出来(想想上面说到的搜索树,每一步对应一个节点以及其延伸出的子树)。2.回溯回溯说白了就是在一个dfs内,结束了调用的dfs,回到原来的进程。回溯回到原来的进程后,一般都要“恢复现场原创 2020-10-05 14:33:44 · 521 阅读 · 1 评论