首页 > 编程语言 >回溯算法

回溯算法

时间:2024-11-18 16:09:32浏览次数:1  
标签:int list ArrayList List 算法 result 回溯 new

回溯算法

 

组合问题

未剪枝优化

import java.util.ArrayList;
import java.util.List;

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    List<Integer> list = new ArrayList<>();
    public List<List<Integer>> combine(int n, int k) {
        int i = 0;
        backtracking(n,k,i);
        return result;
    }

    public void backtracking(int n, int k, int i){
        if (list.size() == k){
            result.add(new ArrayList<>(list));
            return;
        }
        for (int j = i + 1; j <= n; j++){
            list.add(j);
            backtracking(n,k,j);
            list.remove(list.size()-1);
        }
    }
}

剪枝优化

 来举一个例子,n = 4,k = 4的话,那么第一层for循环的时候,从元素2开始的遍历都没有意义了。 在第二层for循环,从元素3开始的遍历都没有意义了。

如果for循环选择的起始位置之后的元素个数 已经不足 我们需要的元素个数了,那么就没有必要搜索了。

import java.util.ArrayList;
import java.util.List;

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    List<Integer> list = new ArrayList<>();
    public List<List<Integer>> combine(int n, int k) {
        int i = 0;
        backtracking(n,k,i);
        return result;
    }

    public void backtracking(int n, int k, int i){
        if (list.size() == k){
            result.add(new ArrayList<>(list));
            return;
        }
        for (int j = i + 1; j <= n-(k-list.size()) + 1; j++){ // 剪枝优化
            list.add(j);
            backtracking(n,k,j);
            list.remove(list.size()-1);
        }
    }
}

 

标签:int,list,ArrayList,List,算法,result,回溯,new
From: https://www.cnblogs.com/gjwqz/p/18552896

相关文章

  • 算法笔记一之多段图问题(动态规划)【应试版】
    提示:本文章不含代码,纯应试解题~(中国地质大学(武汉)研究生算法考试题目)文章目录前言一、问题描述1.题目2.符号描述3.公式介绍二、解题步骤1.st......
  • 代码随想录算法训练营第六天|哈希表|LC242. 有效的字母异位词|LC349. 两个数组的交集|
    哈希表    哈希表:用来快速判断一个元素是否出现在集合里;O(1);    哈希碰撞:比如小王和小李都映射到索引下表1的位置,有2中解决办法(拉链法和线性探测法);    拉链发:通过索引找到,其实拉链发就是要选择适当的哈希表的大小,这样既不会因为数组空值而浪费大量内......
  • 代码随想录算法训练营第四天|LC24.两两交换链表中的节点|LC19. 删除链表的倒数第 N 个
    24.两两交换链表中的节点-力扣(LeetCode)    1、需要一个虚拟节点进行帮助;    2、注意虚拟节点的连接以及变化(尝试有点困惑它的变化,后面有点理解);    3、注意后续第二组的交换时如何与第一组交换进行连接;fromtypingimportOptionalclassLis......
  • 代码随想录算法训练营第三十二天| 509. 斐波那契数 、70. 爬楼梯、746. 使用最小花费
    理论基础总结一下就是:动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。动态规划五部曲确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组509.斐波那契数1.......
  • 代码随想录算法训练营第三十三天| 62.不同路径 、63. 不同路径 II、343. 整数拆分 。c
    62.不同路径思路:按照dp五步法分析,成功AC。代码随想录classSolution{publicintuniquePaths(intm,intn){int[][]dp=newint[m+1][n+1];dp[0][1]=1;for(inti=1;i<=m;i++){for(intj=1;j<=n;j++){......
  • AI智能分析视频分析网关周界入侵识别AI算法检测方案
    在当今这个信息化、智能化快速发展的时代,视频监控和人工智能技术的结合正在重塑我们对安全管理的认知。特别是在周界入侵检测等关键领域,AI视频智能分析技术的应用正带来一场效率和准确性的革命。在视频监控及AI视频智能分析领域,我们积累了丰富的技术经验和实践案例。周界入侵视频......
  • 摄像机实时接入分析平台视频分析网关烟火检测算法在街道安防场景中的应用
    传统的火灾防控方式,如安装烟雾报警器和消防器材,虽然在一定程度上能够减少火灾的发生和损失,但仍然存在诸多不足。相比之下,视频监控与智能分析技术的应用,为商铺火灾等安全管理带来了革命性的变革。通过摄像机实时接入分析平台视频分析网关的视频智能分析技术,可以对监控视频进行智能......
  • 某app最新版 vmp算法分析二
    第一篇文章看这里,某app最新版vmp算法分析一,这是第二篇关于赫利俄斯(H)的,拉顿(L)和H是同一个算法,所以L马上要下线了,而且最近看到了r0ysue代发了该公司的该算法的升级迭代招聘要求,80~130W,北深杭,寻思着已经防护的那么好了,还高薪招人,真是不给我们逆向留条活路啊.不过这......
  • 关于Java中算法的基础运用与讲解
    1.冒泡排序(BubbleSort)基本思路通过重复遍历要排序的列表,一次比较两个元素,如果它们的顺序错误就交换它们。这个过程会重复进行直到没有更多的交换需要做,这意味着列表已经排序完成。详细步骤外层循环:遍历数组的每个位置i,表示已经进行了多少轮比较。内层循环:从位置0......
  • ybtoj:二分算法
    A:数列分段点击查看代码#include<bits/stdc++.h>usingnamespacestd;intm,n;inta[100002];intl,r;boolcheck(intlimit){ intcnt=1,sum=0; for(inti=1;i<=n;i++) { if(sum+a[i]>limit){ cnt++; sum=a[i]; } else{ sum+=a[i]; } }......