Leetcode算法-DFS

其实没什么说的,就是想随便记一下。
dfs,深度优先遍历或者回溯法,本质其实是一种暴力搜索法,将所有情况全部列举出来,然后从中筛选出我们所需要的元素,如果数据比较庞大的话,dfs会超时,可以考虑考虑动态规划。
主要解决问题有三类

  • 场景题:如字符串中的各种排列组合等
  • 二叉树:题目直接给定二叉树,进行遍历
  • 二维数组的方法。

leetcode上可以用的练习题如下
场景题可以抽象为二叉树
17. 电话号码的字母组合
22. 括号生成
39. 排列组合
46. 全排列
47. 全排列 II

直接二叉树的题
100. 相同的树
113. 路径总和 II
129. 求根节点到叶节点数字之和

二维数组
200. 岛屿数量

大致的步骤都是

  1. 先在主方法中判断边界条件,如s.length()<=1或者s=null的情况,然后调用dfs方法。
  2. 编写dfs():
  • 确定参数,一般是(目标字符串或者根节点,index索引或者pb已访问数组,level深度,当前遍历结果,全部的结果列表)
  • 确定结束条件,如index=s.length()或者index=level+1等,将当前遍历结果添加到结果列表中,return返回。如果要求的结果是一些列表,而且不能重复,可以在这一步对列表进行排序,然后判断结果列表中是否包含当前结果,不包含则添加。
  • 进行遍历,如for (int i=0;i<s.length();i++),然后如果是字符串之类的,判断当前是否已被访问过,如果没有,设置当前pb为true已访问,然后调用dfs递归,然后需要回溯一下,即设置pb为false,以便继续当前的遍历。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值