58 回溯算法求组合问题

问题描述:给定一个无重复元素的数组nums和一个目标数,找出nums中所有可以使数字和为target的组合;

回溯分析:没个数都有选与不选两种情况,所以回溯深度为nums.length,一旦当前target==0,则加入组合中,到达最后都不能使得target==0,则返回。

public void tranceBack(int []nums,int target,Link<Integer>templist,int index,List<List<Integer>>res)

{

if(target==0){res.add(new Link<Integer>(templist));return;}

if(index==nums.length){return;}

templist.add(nums[index]);

tranceBack(nums,target-nums[index],templist,index+1,res);

templist.remove(templist.size()-1);

tranceBack(nums,target,templist,index+1,res);

}

public List<List<Integer>> TranceBack(int []nums,int target)

{

List<List<Integer>>res=new List<List<Integer>>();

tranceback(nums,target,new Link<Integer>(),0,res);

return res;

}

//可以看成是求组合问题,需要组合的数字从小到大排列,从而考虑重复问题。

java 复制代码
public void tranceBack(int []nums,int index,int target,List<Integer>templist,List<List<Integer>>res)
{
if(target==0){res.add(templist);return;}
for(int i=index;i<nums.length;i++)
{
templist.add(nums[i]);
tranceBack(nums,i+1;target+nums[i],templist,res);
templist.remove(templist.size()-1);
}
}
public List<List<Integer>> TranceBack(int []nums,int target)
{
List<List<Integer>>res=new List<List<Integer>>();
tranceBack(nums,0,target,new List<Integer>(),res);
​​​​​​​return res;
}
相关推荐
专注API从业者9 分钟前
【京东API开发指南】三步获取商品详情页实时数据:SKU、价格、销量全解析
java·前端·javascript
QQ_77813297414 分钟前
突破时空边界:Java实时流处理中窗口操作与时间语义的深度重构
java
huohuopro22 分钟前
Maven生命周期
java·开发语言·后端·maven
嘵奇25 分钟前
Spring Boot 与 Couchbase 整合教程
java·spring boot·后端
veejaLiu28 分钟前
LeetCode 30.串联所有单词的子串
java·学习·算法·leetcode·职场和发展·刷题
小丁爱养花33 分钟前
Web 小项目: 网页版图书管理系统
java·spring·mybatis
Echo木2 小时前
DeepSeek-R1学习
人工智能·学习·算法
zeijiershuai2 小时前
Java单元测试、Junit、断言、单元测试常见注解、单元测试Maven依赖范围、Maven常见问题解决方法
java·junit·单元测试·maven
Warren983 小时前
十分钟学会Git
java·ide·笔记·git·gitee