【LeetCode: 39. 组合总和 + 递归】

ops/2024/9/25 8:34:18/

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • 递归
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

⛲ 题目描述

给你一个 无重复元素 的整数数组 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 。
仅有这两种组合
示例 2:

输入: candidates = [2,3,5], target = 8
输出: [[2,2,2,2],[2,3,3],[3,5]]
示例 3:

输入: candidates = [2], target = 1
输出: []

提示:

1 <= candidates.length <= 30
2 <= candidates[i] <= 40
candidates 的所有元素 互不相同
1 <= target <= 40

🌟 求解思路&实现代码&运行结果


递归

🥦 求解思路
  1. 该题目通过递归来求解,在一个无重复元素的数组中,找到一个可以组成target不同结果形式返回。注意,数组中的元素可以多次选择,并且没有重复元素。
  2. 我们的递归函数也按照这样来设计,来到当前的位置,组成target的不同结果,并记录返回。
  3. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
java">class Solution {private List<List<Integer>> ans = new ArrayList<>();private List<Integer> list = new ArrayList<>();public List<List<Integer>> combinationSum(int[] candidates, int target) {dfs(0, candidates, target);return ans;}public void dfs(int index, int[] candidates, int target) {if (index > candidates.length || target < 0)return;if (target == 0) {ans.add(new ArrayList<>(list));return;}for (int i = index; i < candidates.length; i++) {list.add(candidates[i]);dfs(i, candidates, target - candidates[i]);list.remove(list.size() - 1);}}
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/ops/8721.html

相关文章

mars3d实现禁止地图移动,禁止地图左右平移,但是鼠标可以移动的效果。

new mars3d.layer.GeoJsonLayer({渲染后实现鼠标左键按住不释放拖动时&#xff0c;地图不跟着拖动效果 当前问题&#xff1a; 1.在map初始化&#xff0c;或者是加载效果的时候&#xff0c;整个地球的场景都是一样的。 如果鼠标左键按住不释放&#xff0c;在屏幕上拖动的时候…

【Linux驱动层】iTOP-RK3568学习之路(三):字符设备驱动框架

一、总体框架图 二、字符设备相关函数 静态申请设备号 register_chrdev_region 函数原型&#xff1a;register_chrdev_region(dev_t from, unsigned count, const char *name) 函数作用&#xff1a;静态申请设备号&#xff0c;可以一次性申请多个连续的号&#xff0c;count指定…

工厂设计模式

工厂设计模式是一种创建型设计模式&#xff0c;用于创建对象的过程中封装对象的创建逻辑。 它提供了一种创建对象的最佳方式&#xff0c;不需要在每个使用该对象的地方直接实例化对象。工厂模式通过定义一个公共的接口来创建对象&#xff0c;然后由子类来实现这个接口以提供具…

网络安全威胁激增,数据使用需更加谨慎

网络犯罪分子是指那些故意从事网络恶意活动的个人或团体。通过黑客攻击、网络钓鱼等手段意图破坏我们的系统、网络或数据。他们的动机多样&#xff0c;包括经济利益、政治意识形态、怨恨、复仇等等。 近年来&#xff0c;网络安全威胁呈现爆炸式增长。IBM的威胁情报报告将网络钓…

mapbox控制3D模型旋转

贴个群号 WebGIS学习交流群461555818&#xff0c;欢迎大家 效果 原理与源码 获取角度&#xff0c;然后一直更改角度&#xff0c;角度到达180度后赋值成-180度&#xff0c;然后转到开始获取的角度的角度的时候就停止旋转 function rotateModel(layerID){let bearing map.get…

Linux的图形资源及指令

一、火车 1.切换到超级用户 su 2.下载资源 yum install -y sl 3.输入指令 sl&#xff0c;得到火车图形 如果没有得到该图形&#xff0c;就将2处改为yum install -y epel-release。 二、Linux的logo 1.在超级用户模式下下载资源 yum install -y linux_logo 2.输…

Java初学日记 十三 (GUI)

GUI编程 概述 GUI(Graphical Uers Interface)全称图形用户界面 swing指javax.swing包&#xff0c;该包中包含实现界面的类&#xff0c;这些类都可称为组件 组件可分为两大类&#xff1a; 容器组件 窗口 import javax.swing.*; ​ public class LoginFrame extends JFram…

Android活动之Intent

Intent Intent是Android程序中各组件之间进行交互的一种重要方式&#xff0c;它不仅可以指明当前组件想要执行的动作&#xff0c;还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景&#xff0c; 显示intent 第一个参数Context要求提供…