首页 > 其他分享 >回溯随笔

回溯随笔

时间:2023-11-07 21:33:22浏览次数:30  
标签:int startIndex result 回溯 path 随笔 size

回溯问题通用模板

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

组合问题

在1-n数中找到所有大小为k的组合,leetcode:77
https://leetcode.cn/problems/combinations/

解法:

class Solution 
{
    List<List<Integer>> result;
    LinkedList<Integer> path;
    public List<List<Integer>> combine(int n, int k) 
    {
        result = new ArrayList<>();
        path = new LinkedList<>();
        traceback(n,k,1);
        return result;
    }
    public void traceback(int n, int k,int startIndex)
    {
        //递归终止条件,相当于到达叶节点,path大小达到说明此时得到了一个目标组合
        if(path.size() == k)
        {
            result.add(new ArrayList<>(path));
            return;
        }
        for(int i = startIndex;i <= n;i++)
        {
            path.add(i);//做选择
            traceback(n,k,i+1);//把该选择移除出选择列表
            path.removeLast();//撤销选择
        }
    }
}

组合问题剪枝优化

可考虑的情况:做完当前选择后剩下的选择列表大小 >= 达到大小k还需选择的元素数
例子:n = 4 k = 4 此时startIndex = 2,已有列表大小path.size()为1,加入当前元素后为path.size()+1为2,剩下的选择列表大小为n - startIndex,还需的元素数为k - (path.size() + 1)
n - startIndex >= k - (path.size() + 1) 则startIndex <= n - k + path.size() + 1 (+1容易被漏掉)

标签:int,startIndex,result,回溯,path,随笔,size
From: https://www.cnblogs.com/suz10720/p/17816077.html

相关文章

  • 2023 10月随笔、总结
    202310月随笔、总结10月份的事情不多,主要在整问卷答题平台PerfeyePerfeye把之前的自定义画廊给优化了一波,一些bug也给修复了,对比页面算是重构完成了,那就要跟着迭代上线了,上线后,是出现了一些bug,但是都解决了。总体上来说还是很顺利的。问卷答题部门这边要整一个竞赛的活动,......
  • 2023 09月随笔、总结
    202309月随笔、总结9月份主要不忙,主要整了Perfeye的优化和新平台的搭建PerfeyePerfeye平台,之前的详情页面重构过了,性能有了很大的提升,维护性也提高了效果很棒,但是对比页面还是旧的页面,class组件、函数组件混用,重复、繁琐的逻辑,每次有需求都是在艰难的维护,维护的成本越来越高......
  • 每日随笔——简单工厂模式
    [实验任务一]:女娲造人使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象。请用程序设计实现上述场景。实验要求:1.画出对应的类图;2.提交源代码;3.注意编程规范。类图: 源代码:......
  • 231106-jmeter随笔
    1.获取接口的执行时间 Stringctime=prev.getTime().toString();2.String转int intc=Integer.parseInt(ctime);3.获取接口的请求data部分Stringreq_data=prev.queryString4.jmeter后置处理器,文件写入本地,用于帅选参数化数据Stringfilename=“本......
  • java——kafka随笔——broker&主题-topic&分区-partition理解
                  首先,让我们来看一下基础的消息(Message)相关术语:名称解释Broker消息中间件处理节点,⼀个Kafka节点就是⼀个broker,⼀个或者多个Broker可以组成⼀个Kafka集群TopicKafka根据topic对消息进⾏归类,发布到Kafka集群的每条消息都......
  • java——redis随笔——实战——分布式缓存——哨兵
                                                                           ......
  • java——redis随笔——实战——分布式缓存——主从
                                                                               ......
  • STM32 PWM控制LED流水灯 学习记录随笔
    代码部分#include"stm32f10x.h"                 //Deviceheader#include"Delay.h"intmain(void){   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//启用系统寄存器时钟,使能GPIOC组,并启动   GPIO_InitTypeDefGPIO_InitStructure;  ......
  • java——redis随笔——实战——分布式缓存
    在使用Redis过程中,持久化是一项非常重要的功能,因为如果RedisServer停止工作,所有的数据将全部丢失。 为了避免这种情况的出现,我们需要将Redis中的数据保存在硬盘上,以保证数据不受服务器宕机影响。 Redis提供了两种持久化方式——RDB和AOF。    笔者将会以RDB与AOF......
  • stm32学习记录随笔23.11.3
    RCC外设时钟使能常用函数//标准库文件->stm32f10x_rcc.hvoidRCC_AHBPeriphClockCmd(uint32_tRCC_AHBPeriph,FunctionalStateNewState);//RCC_AHB外设时钟控制voidRCC_APB2PeriphClockCmd(uint32_tRCC_APB2Periph,FunctionalStateNewState);//RCC_APB2外设时钟控制void......