给定一个无重复元素的正整数数组 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); // 回溯 } } } }