首页 > 其他分享 >dfs专题一:递归

dfs专题一:递归

时间:2025-01-21 22:04:32浏览次数:3  
标签:head 专题 ListNode val 递归 dfs next return

dfs简介:

1.汉诺塔问题

link:面试题 08.06. 汉诺塔问题 - 力扣(LeetCode)

code

class Solution {
public:
    void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {
        dfs(A, B, C, A.size());
    }

    void dfs(vector<int>& A, vector<int>& B, vector<int>& C, int n)
    {
        if(n == 1)//出口
        {
            C.push_back(A.back()); A.pop_back();
            return;
        }
        dfs(A, C, B, n - 1);// 相信dfs一定可以完成任务
        C.push_back(A.back()); A.pop_back();
        dfs(B, A, C, n - 1);
    }
};

2.合并两个升序链表

link:21. 合并两个有序链表 - 力扣(LeetCode)

code

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        return dfs(list1, list2);
    }

    ListNode* dfs(ListNode* list1, ListNode* list2)
    {
        if(!list1) return list2;
        if(!list2) return list1;
        if(list1->val > list2->val) swap(list1, list2);
        {
            list1->next = dfs(list1->next, list2);
            return list1;
        }
    }
};

3.反转链表

link:206. 反转链表 - 力扣(LeetCode)

code

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        return dfs(head);
    }

    ListNode* dfs(ListNode* head)
    {
        if(!head || !head->next) return head;
        ListNode* newhead = dfs(head->next);
        head->next->next = head;
        head->next = nullptr;
        return newhead;
    }
};

4.两两交换链表中的节点

link:24. 两两交换链表中的节点 - 力扣(LeetCode)

code

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        return dfs(head);
    }

    ListNode* dfs(ListNode* head)
    {
        if(!head || !head->next) return head;
        ListNode* next = head->next;
        head->next = dfs(head->next->next);
        next->next = head;
        return next;
    }
};

5.快速幂Pow(x, n)

link:

典型算法,快速求出pow(x, n) :不能return pow(x, n - 1) * x;太慢了

code

class Solution {
public:
    double myPow(double x, long long n) {
        if(n == 0) return 1;
        if(n < 0) return myPow(1/x, -n);
        double tmp = myPow(x, n/2);
        double ans = n%2==0 ? tmp*tmp : tmp*tmp*x;
        return ans;
    }
};

 

标签:head,专题,ListNode,val,递归,dfs,next,return
From: https://blog.csdn.net/li_peixiansang/article/details/145269799

相关文章

  • 蓝桥杯——求递归
    publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); longk=sc.nextLong(); longl=1;longr=Long.MAX_VALUE-1;//从最大的数字开始找 while(l<r){//折半查找 longmid=(l+r)/2; ......
  • 数据结构与算法之递归: LeetCode 39. 组合总和 (Ts版)
    组合总和https://leetcode.cn/problems/combination-sum/description/描述给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的所有不同组合,并以列表形式返回。你可以按任意顺序返回这些组合candid......
  • MATLAB专题4 函数
    目录一、函数声明二、函数调用三、匿名函数四、递归函数函数:一个能够实现特定功能的逻辑模块一、函数声明注意基本结构与一些注意事项:函数声明的下一行可以添加注释,可在命令行用help或者lookfor调用二、函数调用注意三种变量:1.局部变量:函数中的变量函数结束后......
  • 老榕树的Java专题:Java 中如何实现异步
    在Java编程中,异步操作是一项关键技术,它允许程序在执行某些耗时任务时,不会阻塞主线程,从而提高整体的性能和响应性。本文将探讨Java中实现异步的几种常见方式。一、使用Thread类Java的Thread类是实现异步的基础方式。通过创建一个继承自Thread类的子类,并在run方法中定义......
  • 递归实现青蛙跳台阶问题与汉诺塔问题
    1.青蛙跳台阶问题1.1题目描述一只青蛙一次可以跳1到2阶台阶,问,青蛙跳到第n阶台阶时,有几种跳法?跳到第1阶台阶时,有1种跳法跳到第2阶台阶时,有2种跳法跳到第n阶台阶时,从第n-1阶台阶跳1阶台阶到达第n阶台阶,这是方法1从第n-2阶台阶跳2阶台阶到达第n阶台阶,这是方法2所以......
  • IM 专题文章系列合集
    去年在一朋友建议下,将笔者之前互联网IM系统的研发经验以专题文章的方式来输出,目前已近完结;为方便大家查阅,做整体归纳和梳理。IM专题文章分成五个部分,共计36篇,如下:第一部分:需求模型   第1篇:《基于需求分析模型来结构化剖析IM系统》第二部分:单体架构   ......
  • 2025dsfz集训Day3:DFS搜索与剪枝
    DAY3:DFS搜索与剪枝深搜深度优先搜索(DFS)是一种遍历或搜索树或图的算法,它从一个根节点开始,尽可能深地搜索每个分支,直到找到解为止。在搜索讨程中,为了提高效率,减少不必要的搜索,通常会采用各种剪枝优化策略。剪枝基本思想在深度优先搜索中,我们通常会遍历图或树的所有节点和边......
  • 深入HDFS——数据上传源码
    引入就如RPC篇章里提到的观点一样,任何一种能广为传播的技术,都是通过抽象和封装的思想,屏蔽底层底层复杂实现,提供简单且强大的工具,来降低使用门槛的。HDFS的风靡自然也是如此。通过前面深入了NameNode和DataNode的启动源码,我们已经是略有体会,但重启毕竟属于工作时几乎遇不到的......
  • 深入HDFS——DataNode启动源码
    引入上一篇我们看完了NameNode的启动源码,对于NameNode我们已经很熟悉了,今天我们接着来看看它的“得力干将”——DataNode。首先,自然还是从元数据管理篇提到的DataNode类(org.apache.hadoop.hdfs.server.datanode.DataNode)开始。不过在深入启动源码前,我们先看看它的源码注释:D......
  • hadoop--命令--hdfs fsck / -files -blocks--显示块信息
    [root@master~]#hdfsfsck/-files-blocksConnectingtonamenodeviahttp://master:50070/fsck?ugi=root&files=1&blocks=1&path=%2FFSCKstartedbyroot(auth:SIMPLE)from/192.168.94.128forpath/atSatJan1818:24:09CST2025//hbase/h......