【Leetcode 39】组合总和 —— 回溯法

news2024/11/27 10:45:34

39. 组合总和

给你一个无重复元素的整数数组candidates和一个目标整数target ,找出candidates中可以使数字和为目标数target的 所有不同组合,并以列表形式返回。你可以按**任意顺序 **返回这些组合。

candidates中的同一个数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为target的不同组合数少于150个。

示例 1:

输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]
解释:
2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一个候选, 7 = 7 。
仅有这两种组合。

题目分析

回溯法解题步骤

  1. 针对所给问题,定义问题的解空间
  2. 确定易于搜索的解空间结构
  3. 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索

回溯法有“通用解题法”之称,用它可以系统地搜索问题的所有解。回溯法是一个既带有系统性又带有跳跃性的搜索算法。
详细可见 Leetcode 回溯法详解

经典排列树,按节点遍历,更多案例可见 Leetcode 回溯法详解

class Solution {
    List<List<Integer>> res = new ArrayList<>();
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        Arrays.sort(candidates);
        backtrack(candidates, 0, new ArrayList<>(), target);
        return res;
    }

    /**
     * output(x)     记录或输出得到的可行解x
     * constraint(t) 当前结点的约束函数
     * bount(t)      当前结点的限界函数
     * @param t  t为当前解空间的层数
     */
    private void backtrack(int[] nums, int k, List<Integer> temp, int target) {
        // bount
        if (target == 0) {
            res.add(new ArrayList<>(temp));
            return;
        } else if (target < 0) {
            return;
        }

        for (int i = k; i < nums.length; ++i) {
            // 剪枝
            if (target - nums[i] < 0) {
                break;
            }
            temp.add(nums[i]);
            backtrack(nums, i, temp, target - nums[i]);
            temp.remove(temp.size() - 1);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1342467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

畅捷通的 Serverless 探索实践之路

作者&#xff1a;计缘&#xff0c;阿里云云原生架构师 畅捷通介绍 畅捷通是中国领先的小微企业财税及业务云服务提供商&#xff0c;成立于 2010 年。畅捷通在 2021 年中国小微企业云财税市场份额排名第一&#xff0c;在产品前瞻性及行业全覆盖方面领跑市场&#xff0c;位居中…

百万数据集测试赛题秒级查询的MySQL方案

目录 比赛题目 最佳解法 solution_row prime_encoded 相关知识 递归 CTE SUBSTRING_INDEX 引用资料 比赛题目 有一张表 cards&#xff0c;id 是自增字段的数字主键&#xff0c;另外有4个字段 c1,c2,c3,c4 &#xff0c;每个字段随机从 1~10 之间选择一个整数&#xff…

十二:爬虫-Scrapy框架(上)

一&#xff1a;Scrapy介绍 1.Scrapy是什么&#xff1f; Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架(异步爬虫框架) 通常我们可以很简单的通过 Scrapy 框架实现一个爬虫&#xff0c;抓取指定网站的内容或图片 Scrapy使用了Twisted异步网…

多平面包络的圆柱体参数估计

多平面包络的圆柱体参数估计 场景 现有多个空间平面包络一个柱体&#xff0c;从圆柱顶端俯视如图所示&#xff1a; 中心位置为圆柱实际所在位置。现在已知这些平面的参数&#xff08;每个平面的方程均为axbyczd0形式, 参数为a,b,c,d&#xff09;&#xff0c;希望求解它们包络…

阿里云oss无法访问.apk或者.ipa的文件

-- 有意栽花花不发 无心插柳柳成荫 0048-00000201 更新时间&#xff1a;2023-07-19 10:31:16 问题描述 在2023年08月15日后为Bucket开通传输加速&#xff0c;如果通过OSS传输加速域名访问其中后缀为.apk或者.ipa的文件&#xff0c;服务器返回400错误。 问题原因 出于安全…

分布式IO在工业自动化中的应用

传统的自动化产线及物流系统主要是利用PLC来处理数据&#xff0c;并将这些数据保存在PC当中。但是随着互联网技术的迅速发展&#xff0c;越来越多的系统集成商利用分布式IO模块&#xff0c;实现从控制器到自动化最底层之间的IO通信。 分布式IO在工业自动化中的应用 分布式IO是用…

再次被gpt震撼到了,md转json

1.md内容来自excel 参考链接&#xff1a; https://chat.xutongbao.top/

什么是计算机视觉

计算机视觉&#xff08;Computer Vision&#xff09;是一门研究如何让计算机能够理解和分析数字图像或视频的学科。简单来说&#xff0c;计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。为实现这个目标&#xff0c;计算机视觉结合了图像处理、机器学习、模…

低代码平台搭建ERP系统 低代码快速开发灵活的ERP

随着数字化时代的到来&#xff0c;企业迫切需要高效、灵活的ERP系统来提高运营效率。在这一背景下&#xff0c;白码低代码平台成为了企业实现数字化转型的首选工具。本文将介绍低代码开发ERP的概念&#xff0c;并以白码低代码平台为例&#xff0c;探讨其在企业数字化转型中的重…

解决jenkins、git拉取代码仓库失败Please make sure you have the correct access rights

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

spellman高压发生器电源维修XRV450PN4500 NY1059

Spellman高压电源X射线发生器维修XRV系列常见维修型号&#xff1a;XRV160N1800, XRV160N3000, XRV160P4000, XRV160P6000/208V 3o, XRV225N3000, XRV225N6000/208V 3o, XRV225P4000, XRV350PN4500, XRV450PN4500。 Spellman所拥有的变频器架构可以使高压电源获得高利用率的效率…

小C说历史(人物介绍第二篇):Unix之父 C语言之父 伟大的Ken Thompson 肯·汤普森

Unix之父 C语言之父 伟大的Ken Thompson 肯汤普森 Unix之父——肯•汤普森&#xff08;Ken Thompson&#xff09;被称作“世界上最杰出的程序员”&#xff0c;他自学编程&#xff0c;26岁创造Unix&#xff0c;改写了计算机操作系统的历史&#xff0c;并在古稀之年成为Go语言的共…

win10 telnet服务开启教程

win10 telnet服务开启教程 1、打开控制面板&#xff0c;选择【程序和功能】 2、点击【启用或关闭Windows功能】 3、勾选【Telnet 客户端】,然后点击确定。

【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版

第一章 简介 太赫兹波是介于微波和光波之间的光谱区域&#xff0c;频率从 0.1THz ~ 10THz 之间&#xff0c;波长在 3mm ~ 30μm 之间。提供大块连续的频带范围以满足对 Tbit/s 内极高数据传输速率的需求&#xff0c;使该区域成为下一代无线通信&#xff08;6G&#xff09;的重…

外汇天眼:Valdas Dapkus和Tradewale因零售外汇欺诈计划被判支付280万美元

美国衍生品市场监管机构商品期货交易委员会&#xff08;CFTC&#xff09;宣布&#xff0c;美国新泽西地区法院于11月28日发布了对位于伊利诺伊州的Valdas Dapkus的最终裁定默认令。5月4日&#xff0c;法院对Dapkus控制的两家实体——Tradewale LLC和Tradewale Managed Fund发布…

电子工程师如何接私活赚外快?

对电子工程师来说&#xff0c;利用业余时间接私活是个很常见的技术&#xff0c;不仅可以赚取额外收入&#xff0c;也能提升巩固技术&#xff0c;可以说国内十个工程师&#xff0c;必有五个在接私活养家糊口&#xff0c;如果第一次接私活&#xff0c;该如何做&#xff1f; 很多工…

虚拟机迁移技术原理与应用

虚拟机迁移技术主要应用于两种场景&#xff1a; 第一种&#xff0c;随着现在虚拟化的发展&#xff0c;传统it架构的物理机需迁移到虚拟机上&#xff0c;实现负载均衡、资源优化等目的。 第二种&#xff0c;将虚拟机从一个虚拟化平台迁移到另一个虚拟化平台&#xff0c;可以是…

Django 文件上传(十二)

当 Django 处理文件上传时&#xff0c;文件数据最终会被放置在 request.FILES 。 查看文档&#xff1a;文件上传 | Django 文档 | Django Django工程如下&#xff1a; 创建本地存储目录 在static/应用目录下创建uploads目录用于存储接收上传的文件 在settings.py 配置静态目…

Android Context在四大组件及Application中的表现

文章目录 Android Context在四大组件及Application中的表现Context是什么Context源码Activity流程分析Service流程分析BroadcastReceiver流程分析ContentProvider流程分析Application流程分析 Android Context在四大组件及Application中的表现 Context是什么 Context可以理解…

Python-动态柱状图可视化

柱状图 1.基础柱状图1.1通过Bar构建基础柱状图1.2反转x轴&#xff0c;y轴1.3数值标签在右侧1.4总结 2.基础时间柱状图2.1掌握基础的时间线配置动态图表2.2创建时间线2.3自动播放2.4时间线设置主题2.5总结 3.GDP动态柱状图绘制3.1掌握列表的sort方法并配合配合lambda匿名函数完成…