首页 > 编程语言 >算法-递归三(树形结构)

算法-递归三(树形结构)

时间:2023-04-09 11:00:09浏览次数:37  
标签:rt rtItem num 递归 nums 算法 树形 new visited

public class Solution {
    public IList<IList<int>> Permute(int[] nums) {
        var rtItem = new List<int>();
        var visited= new Dictionary<int, bool>();
        IList<IList<int>> rt = new List<IList<int>>();
        BackTracking(nums, rtItem, rt, visited);
        return rt;
    }
    /*递归下面这种类型的
        1      |     2
      1    2   |  1     2
     1  2 1  2 | 1  2  1  2
    */
    public void BackTracking(int[] nums, List<int> rtItem, IList<IList<int>> rt, Dictionary<int, bool> visited)
{
    if (rtItem.Count == nums.Length)
    {
        rt.Add(new List<int>(rtItem.ToArray()));
        //return;
    }
    for (int i = 0; i < nums.Length; i++)
    {
        var num = nums[i];
        if (!visited.ContainsKey(num) || !visited[num])
        {
            rtItem.Add(num);
            visited[num]=true;
            BackTracking(nums, rtItem, rt, visited);
            rtItem.RemoveAt(rtItem.Count - 1); // 回溯啊
            visited[num] = false; // 回溯啊
        }
    }
}

}

 

标签:rt,rtItem,num,递归,nums,算法,树形,new,visited
From: https://www.cnblogs.com/Insist-Y/p/17300005.html

相关文章

  • 基于TiDB+Flink实现的滑动窗口实时累计指标算法
    作者:Jellybean前言在不少的支付分析场景里,大部分累计值指标可以通过T+n的方式计算得到。随着行业大环境由增量市场转为存量市场,产品的运营要求更加精细化、更快速反应,这对各项数据指标的实时性要求已经越来越高。产品如果能实时把握应用的整体运行情况或特征用户的状态,就可......
  • 算法学习之选择排序【C语言】
    选择排序排序规则选择排序是一种简单直观的排序算法,其基本思想是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,直到全部元素排序完成。具体步骤如下:1.从第一个数开始,与其后的数一一比较,如后小前大,则交换,依次比较直至最后一组数。2.通过上述步骤,得到参加循......
  • ssh服务支持弱加密算法
    详情描述:远程SSH服务器配置为使用arcfour流密码或无任何密码。RFC4253不建议使用arcfour弱算法。https://tools.ietf.org/html/rfc4253#section-6.3解决方案:解决方法:*在SSH会话中仅使用CTR模式加密算法,如AES-CTR。https://tools.ietf.org/html/rfc4253#section-6.3方案......
  • 基于蛙跳算法的最优值计算matlab仿真
    1.算法描述            蛙跳算法是基于种群进化的元启发式算法之一,通过模拟自然界中青蛙觅食过程中种群所体现出的交流与合作行为,以实现对问题的求解。在一片湿地中,分布着一群青蛙,每只青蛙有自己的想法,每只青蛙的想法则被定义为一个解。每只青蛙找到食物时,都会......
  • 递归-回溯2
    namespaceJD;publicclassJDTest{publicstaticvoidShow(){int[]arr={1,2,3,4,5,6,7};varroot=BuildTree2(arr,0,arr.Length-1);varstack=newStack<int>();varrtList=newList<int>();......
  • C4.5分类树算法介绍
    为什么C4.5会出现?因为ID3算法节点的分支越多,信息增益也就越大,这会出现过拟合的现象,因此提出C4.5算法。图1C4.5的属性选择方法——获利比例获利比例=信息增益/分支度IV分支度IV与各分支下的类别数目之比成负相关:假如14个样本一共分4支:划分方法1为:分支1数目:分支2数目:分支......
  • 随机森林算法深入浅出
    目录一随机森林算法的基本原理二随机森林算法的优点1.随机森林算法具有很高的准确性和鲁棒性2.随机森林算法可以有效地避免过拟合问题3.随机森林算法可以处理高维度数据4.随机森林算法可以评估特征的重要性三随机森林算法的缺点1.随机森林算法对于少量数据集表现不佳2.随......
  • 理解回溯算法——从全排列问题开始
    一、简介回溯法(backtracking)是优先搜索的一种特殊情况,又称为试探法,常用于需要记录节点状态的深度优先搜索。通常来说,排列、组合、选择类问题使用回溯法比较方便。 二、从全排列问题开始理解回溯算法以数组[1,2,3]的全排列为例。先写以1开头的全排列,它们是:[1,2,3],[1,......
  • 【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现
    承接上文承接上一篇文章【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(上)】我们基本上对层级时间轮算法的基本原理有了一定的认识,本章节就从落地的角度进行分析和介绍如何通过Java进行实现一个属于我们自己的时间轮服务......
  • HJ67_24点游戏算法_多维递归_DFS(深度优先搜索)
    思路:多维递归,深度有限遍历加减乘除四种情况。知识点:1、多维递归不能对传递的变量进行修改,否则无法回溯。应该传递一个新地址的变量,如代码所示,传递切片的列表,不修改列表  2、搜索遗漏。两括号比如((9-4)-1)*6选取任意一个数作为第一个运算数与24运算,不能找出所有24点的计算......