题目链接:https://leetcode.com/problems/combination-sum/
这是一个组合和的问题,备选数组里的数不重复,但是可以选择相同的数。肯定要用到回溯(backtrace)递归的方法。
我写递归时喜欢用一个静态list来存最终返回的答案,再开一个较大的静态数组来存临时答案。
下面考虑递归函数怎么写,被选数组和目标和肯定是一直要带的参数,需要一个idx变量来标记某次递归函数调用时在原数组中搜索的起点,这里因为可以重复选,因此起点可以在下一次递归函数调用时重复取到。还有因为存储在静态数组中的有效答案需要一个变量来记录,并随着数组向后搜索调用递归函数时自动增加。具体代码如下:
class Solution {
public static List<List<Integer>> ret;
public static int[] record=new int[100000];
public static List<List<Integer>> combinationSum(int[] candidates, int target)
{
ret=new edList<>();
recursive(candidates,0,target,0);
return ret;
}
public static void recursive(int[] candidates,int idx,int target,int length)
{
if(target==0)
{
edList<Integer> tmp=new edList();
for(int i=0;i<length;i++)
tmp.add(record[i]);
ret.add(tmp);
return;
}
if(target<0 || idx>=candidates.length)
return;
for(int i=idx;i<candidates.length;i++)
{
record[length]=candidates[i];
recursive(candidates,i,target-candidates[i],length+1);
}
}
}
继续阅读与本文标签相同的文章
-
如何检测 Web 服务请求丢失问题
2026-05-18栏目: 教程
-
基于阿里云服务器ECS的建站过程
2026-05-18栏目: 教程
-
8分钟5个点让你彻底了解负载均衡
2026-05-18栏目: 教程
-
2019年9月16日,开发者社区奖励办法--8月评选结果正式公布
2026-05-18栏目: 教程
-
RocketMQ 主题扩分片后遇到的坑
2026-05-18栏目: 教程
