可以重复选取,递归,重复选取第一个元素,直到到达结果或者大于结果
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param target int整型
* @param nums int整型一维数组
* @return int整型ArrayList<ArrayList<>>
*/
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
LinkedList<Integer> path = new LinkedList<Integer>();
public ArrayList<ArrayList<Integer>> combinationCount (int target, int[] nums) {
// write code here
// 参数:target、数组、开始位置startIndex;返回值:void
// 递归终结:大于target,返回;等于放入结果
// 单层逻辑:选取就好
getCombine(target, 0, nums);
return res;
}
private void getCombine(int target, int startIndex, int[] nums) {
if (target < 0) {
return;
}
if (target == 0) {
res.add(new ArrayList(path));
}
for (int i = startIndex; i < nums.length; ++i) {
path.add(nums[i]);
getCombine(target - nums[i], i, nums);
path.removeLast();
}
}
}

京公网安备 11010502036488号