给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。
在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。
样例
在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。
样例
给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]]
import java.util.ArrayList;
import java.util.Scanner;
/**
* 给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。
在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。
样例
给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]]
*
* @author Dell
*
*/
public class Test90 {
public static ArrayList<ArrayList<Integer>> kSumII(int[] A, int k, int target)
{
ArrayList<Integer> list=new ArrayList<>();
ArrayList<ArrayList<Integer>> result=new ArrayList<>();
backtracking(A,k,0,target,list,result);
return result;
}
public static void backtracking(int[] A, int k, int start, int target, ArrayList<Integer> list, ArrayList<ArrayList<Integer>> result)
{
if(k==0&&target==0)
result.add(new ArrayList<Integer>(list));
else
{
for(int i=start;i<A.length;i++)
{
list.add(A[i]);
backtracking(A,k-1,i+1,target-A[i],list,result);
list.remove(list.size()-1);
}
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
for(int i=0;i<n;i++)
{
a[i]=sc.nextInt();
}
int k=sc.nextInt();
int target=sc.nextInt();
ArrayList<ArrayList<Integer>> result=kSumII(a,k,target);
System.out.println(result);
}
}