DFS解题套路总结

本文总结了DFS在解题中的应用,包括处理组合问题、全排列问题和二维问题。在组合问题中,通过递归尝试不同选择并还原以找到所有可能的分割。全排列问题利用标记数组记录元素使用情况,生成所有可能的排列。而在二维问题中,如岛屿计数等,DFS用于探索二维空间的路径。文中给出了相关例题和解题思路。

一、组合问题

题目要求的结果是当前排列的分割!对于长度为n的数组,我们需要依次确认每个位置上的元素。初始问题:从a[0]开始依次确认n个元素。如果我们确认a[0]之后,问题就变成从a[1]开始从剩余元素中选择一个元素确定a[1]。每次选择都有多种可能性,我们依次尝试(尝试后还原),并递归解决选择之后的产生的子问题,并定义出口。 

例如给出初始集合[1, 2, 3],则结果应该是[1, 2, 3], [1, 3], [2, 3], [3]

题目例如Lintcode 426. 恢复IP地址Lintcode 136. 分割回文串Lintcode 425. 电话号码的字母组合Lintcode 152. 组合Lintcode 135. 数字组合Lintcode 153. 数字组合 IILintcode 17. 子集Lintcode 18. 子集 IILeetcode 22.括号生成

二、全排列问题

题目要求的结果是所有排列的集合!用一个标记数组标记元素是否已经使用过,每次从剩余元素中尝试添加新元素到临时解中,当没有新的元素可添加时,临时解就为最终的一个解。

例如给出初始集合[1, 2, 3],则结果应该是[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]

题目例如Lintcode 15. 全排列Lintcode 16. 带重复元素的排列

三、二维问题

例如Lintcode 1080. 最大的岛Lintcode 1479. 能否到达终点Lintcode 1386. 坐缆车Lintcode 123. 单词搜索Lintcode 433:岛屿的个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值