2024.4.20力扣每日一题——组合总和

server/2024/10/18 12:28:41/

2024.4.20

      • 题目来源
      • 我的题解
        • 方法一 回溯

题目来源

力扣每日一题;题序:39

我的题解

方法一 回溯

以每一个位置开始深搜,直到target等于0或者小于0或者遍历完结束。
关键在于:注意去重 巧妙方法:传入一个index,是上一次遍历元素的位置,控制其不再去遍历前面的元素

时间复杂度:O( n ∗ 2 n n*2^n n2n)。n 个位置每次考虑选或者不选,如果符合条件,就加入答案的时间代价。但是实际运行的时候,因为不可能所有的解都满足条件,递归的时候还会用 target−candidates[idx]≥0进行剪枝,所以实际运行情况是远远小于这个时间复杂度的。
空间复杂度:O(n)

java">class Solution {List<List<Integer>> res;public List<List<Integer>> combinationSum(int[] candidates, int target) {res=new ArrayList<>();List<Integer> path=new ArrayList<>();for(int i=0;i<candidates.length;i++){path.add(candidates[i]);dfs(candidates,target-candidates[i],i,path);path.remove(path.size()-1);}return res;}public void dfs(int[] candidates,int target,int index,List<Integer> path){if(target==0)res.add(new ArrayList<>(path));//后一个条件的前提是candidates数组是升序的,这里是看了官方的题解,感觉默认是有序的if(target<0||target-candidates[index]<0)return ;for(int next=index;next<candidates.length;next++){path.add(candidates[next]);dfs(candidates,target-candidates[next],next,path);path.remove(path.size()-1);}}
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~


http://www.ppmy.cn/server/7941.html

相关文章

【PyTorch】2-主要组成模块(数据读入、模型构建、损失函数、评价指标、训练和测试、优化器)

PyTorch&#xff1a;2-主要组成模块 注&#xff1a;所有资料来源且归属于thorough-pytorch(https://datawhalechina.github.io/thorough-pytorch/)&#xff0c;下文仅为学习记录 2.1&#xff1a;深度学习的必要部分 机器学习步骤 【1】数据预处理 【2】划分train、valid、…

org.junit.runners.model.InvalidTestClassError:

测试的时候报错&#xff0c; 添加public关键字。 改为&#xff1a; 即可

【数据结构】08排序

08 排序 1. 冒泡排序&#xff08;BubbleSort&#xff09;1.1 循环嵌套实现1.2 递归实现 2. 选择排序2.1 嵌套循环实现2.2 递归实现 3. 插入排序4. 希尔排序4.1 代码实现 5. 快速排序5.1 代码实现6. 归并排序6.1 递归实现6.2 循环实现 7. 堆排序7.1 构建大顶堆7.2 堆排序7.3 代码…

【详细介绍下图搜索算法】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【C++】双指针算法:盛最多水的容器

1.题目 2.算法思路 有两种方法&#xff1a; 第一种&#xff1a; 暴力穷举法&#xff0c;就是用两次循环将所有的可能性算出来&#xff0c;然后求出最大值。 这种方法最容易想到&#xff0c;但时间复杂度是O(n^2)&#xff0c;一定会超时的&#xff01; 第二种&#xff1a; …

【webrtc】m114自己实现的PrioritizedPacketQueue及优先级处理

G:\CDN\WEBRTC-DEV\libwebrtc_build\src\modules\pacing\prioritized_packet_queue.h跟m98不同 :webrtc】m98 RoundRobinPacketQueue的优先级处理,m114直接使用taskqueue顺序处理了。甚至自己实现了优先级队列感觉简化了实现,更为清晰 易读,但是去掉了码率低就优先的逻辑。1…

如何利用pg_dump和pg_restore迁移从一个PostgreSQL服务器到另一个服务器,同时保持一致性与高效性?

文章目录 解决方案1. 使用pg_dump导出数据2. 将导出的数据复制到目标服务器3. 使用pg_restore导入数据保持一致性与高效性的策略一致性高效性 示例代码导出数据复制数据到目标服务器在目标服务器上解压并导入数据 PostgreSQL数据库的迁移是一个常见的任务&#xff0c;特别是在升…

《深入浅出.NET框架设计与实现》笔记2——C#源码从编写到执行的流程

中间语言&#xff08;Intermediate Language&#xff0c;IL&#xff09; C#编译器在编译时&#xff0c;会将源代码作为输入&#xff0c;并以中间语言形式输入出&#xff0c;该代码保存在*.exe文件中或*.dll文件中。 公共语言运行时&#xff08;CLR&#xff09; 可以将IL代码…