给定一个无重复元素的正整数数组 nums 和一个正整数 target ,找出 nums 中所有可以使数字之和为目标数 target 的组合,nums 中的数可以重复选取,只要选出的组合中有一个数不同则视为是不同组合。
数据范围:数组长度满足
, 数组中的元素满足
,
,保证组合数结果少于 150 个
1,[1]
[[1]]
5,[1,4,5]
[[1,4],[5],[1,1,1,1,1]]
5,[2]
[]
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param target int整型
* @param nums int整型一维数组
* @return int整型ArrayList<ArrayList<>>
*/
ArrayList<ArrayList<Integer>> results = new ArrayList<>();
public ArrayList<ArrayList<Integer>> combinationCount (int target, int[] nums) {
// write code here
dfs(nums, 0, target, new ArrayList<Integer>());
return results;
}
private void dfs(int[] nums, int depth, int rest, ArrayList<Integer> path) {
if(rest < 0){
return; // 凑过头了,直接返回
}
if(rest == 0){
results.add(new ArrayList<Integer>(path)); // 刚好凑到目标,返回一组结果
}else{
for(int i = depth; i < nums.length; i++){
path.add(nums[i]);
dfs(nums, i, rest - nums[i], path);
path.remove(path.size() - 1); // 回溯
}
}
}
}