这个最后得用dp来做,自己一开始想到的递归在遇到如[1,2,3],target=32时会超时,因为会有181997601种可能,laptop运行了1小时都还没算完。。。
public static int combinationSum3(int[] nums, int target) {
int[] array = new int[target + 1];
array[0] = 1;
for (int i = 1; i <= target; i++) {
for (int n: nums) {
if(i >= n)
array[i] = array[i] + array[i - n];
}
}
return array[target];
}
// static int count = 0;
// public static int combinationSum4(int[] nums, int target) {
// Arrays.sort(nums);
// List<Integer> list = new LinkedList<>();
// helper(nums, target, 0, list);
// return count;
// }
//
// private static void helper(int[] nums, int target, int sum, List<Integer> list) {
// if (sum == target) {
// count++;
// for (int j: list) {
// System.out.print(j);
// }
// System.out.println(": count: " + count);
// return;
// }
// for (int i = 0; i < nums.length; i++) {
// if (sum + nums[i] > target) {
// return;
// }
// list.add(nums[i]);
//
// helper(nums, target, sum + nums[i], list);
// list.remove(list.size() - 1);
// }
// }