在剑指Offer里专门有一个部分(大概是连续十几题的样子)考察了 DFS ,也就是深度优先遍历,感觉DFS 也是一种套路,只要思路找对,套一下思路也可以了,在这里记录一下。

在很多Leetcode 的刷题题解里,深度优先都被称为回溯法,所以 DFS 包含了两个部分,遍历下去,回溯回来。

先说遍历下去。

简单来说,就是当下一步有多条选择(岔路) 的时候,优先选择一条路走到底或者找到最优解为止,也就是使用递归。

当路走到底了,回来选择另一条,继续,这就是回溯。

DFS 的好处是不需要保存搜索过程中的状态,搜索过以后就要回溯,在空间上不需要额外保存搜索记录。

在 LeetCode 下的常见做法是:

给出一个 int[][] graph , 给定一些需求,要求返回可能的路径集合,即 List<List<Integer, Integer>>. 在这里,关键字就是可能的全部路径,etc.

举个例子(当然还是 LeetCode 了 https://leetcode.com/problems/all-paths-from-source-to-target)

题目给了一个包含 n 个节点的无回路有向图,找出所有可能的从节点 0 到节点 n-1 的路径。以下上题:

class Solution {
public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
temp.add(0);
dfs(graph,res,temp,0);
return res; } public void dfs(int[][] graph, List<List<Integer>> res, List<Integer> temp,int level){
if(level == graph.length-1){
res.add(new ArrayList<>(temp));
return;
}
for(int tem: graph[level]){
temp.add(tem);
dfs(graph,res,temp,tem);
temp.remove(temp.size()-1);
}
}
}

  

LeetCode刷题感想之DFS的更多相关文章

  1. LeetCode刷题感想

    断断续续用了半年的时间把LeetCode刷完了,之前复习了数据结构与算法.将刷题与复习数据结构结合起来会更有效果.总之不是为了刷题而刷题,而是为了巩固和补充一部分知识. LeetCode真的是一个很好 ...

  2. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

  3. LeetCode刷题总结-数组篇(中)

    本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...

  4. LeetCode刷题总结-树篇(上)

          引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...

  5. LeetCode刷题的一点个人建议和心得

    目录 1.    为什么我们要刷LeetCode? 2.    LeetCode的现状和问题 3.    本文的初衷 4.    LeetCode刷题建议 4.1入门数据结构,打基础阶段 4.2 建立 ...

  6. 看完互联网大佬的「LeetCode 刷题手册」, 手撕了 400 道 Leetcode 算法题

    大家好,我是 程序员小熊 ,来自 大厂 的程序猿.相信绝大部分程序猿都有一个进大厂的梦想,但相较于以前,目前大厂的面试,只要是研发相关岗位,算法题基本少不了,所以现在很多人都会去刷 Leetcode ...

  7. LeetCode刷题专栏第一篇--思维导图&时间安排

    昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...

  8. leetcode 刷题进展

    最近没发什么博客了 凑个数 我的leetcode刷题进展 https://gitee.com/def/leetcode_practice 个人以为 刷题在透不在多  前200的吃透了 足以应付非算法岗 ...

  9. LeetCode刷题指南(字符串)

    作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...

  10. leetcode刷题记录--js

    leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...

随机推荐

  1. java基础(一)~~内存分析

    1.java内存分析 2.2.面向对象内存分析 Java虚拟机的内存可以分为三个区域:栈(stack).堆(heap).方法区(method area): 2.2.1.栈 栈的特点如下: 1.栈描述的 ...

  2. mysql常用语句操作

    概述: 1.通过表结构介绍.来操作mysql常用的语法&语句: 2.现在学习下几个基本的sql语句,万变不离其宗,把基础弄扎实了其它的就很容易了 一.表结构&建表: 1.学生基础信息表 ...

  3. 关于filter_input函数

    PHP: filter_input <?php $search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_ ...

  4. MySQL 列定义的类型是varchar,已建立索引,查询时如果传入的是数字,则无法利用索引,查询特别慢。

    类型不对,导致无法充分利用索引. 比如:select * from table_name_xxx where name = "1234";  ----  查询很快 ,能够使用到na ...

  5. CCCC L3-032 关于深度优先搜索和逆序对的题应该不会很难吧这件事 【树状数组】

    https://pintia.cn/problem-sets/994805046380707840/exam/problems/1518582895035215872 题意 给你一棵树,给定树根,要求 ...

  6. 没有可用软件包 iostat。

    说明: iostat 主要用于监控系统设备的IO负载情况,根据这个可以看出当前系统的写入量和读取量,CPU负载和磁盘负载. iostat 命令的输出结果包含了很多信息,以下是一些常见的统计指标的解释: ...

  7. SqlServer 优化的技巧

    1.避免使用 select * select * 不会走覆盖索引,会出现大量的回表操作,从而导致SQL的查询性能很低 2.用union all 代替 union 1.使用union后,可以获取排重复后 ...

  8. 安装oracle出现环境不满足最低要求

    安装win64_11gR2_database_1of2的时候出现这个,百度了下解决方法 在oracle安装包找到stage文件夹 然后找到cvu 然后在cvu里面找到cvu_prereq,用记事本打开 ...

  9. logback 日志脱敏处理

    1.按正则表达式脱敏处理 参考: https://www.cnblogs.com/htyj/p/12095615.html http://www.heartthinkdo.com/?p=998 站在两 ...

  10. JDBC之Connection

    Connection 目录 Connection Java连接MySQL Connection必备知识点 利用JDBC使用Connection 问题一:为什么Java操作数据库的连接不是越多越好 问题 ...