给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。
在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。
样例
给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]]
public class Solution {
/**
* @param A: an integer array.
* @param k: a positive integer (k <= length(A))
* @param target: a integer
* @return a list of lists of integer
*/
public ArrayList<ArrayList<Integer>> kSumII(int[] A, int k, int target) {
// write your code here
Arrays.sort(A);
ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> tempList=new ArrayList<Integer>();
backTracking(A, k, target, 0, result, tempList);
return result;
}
private static void backTracking(int[] nums, int k, int target, int start, ArrayList<ArrayList<Integer>> result, ArrayList<Integer> tempList){
if(k<0){
return;
}else if(k==0){
int sum=0;
for(int i=0;i<tempList.size();i++){
sum+=tempList.get(i);
}
if(sum==target){
result.add(new ArrayList<Integer>(tempList));
}
}else{
for(int i=start;i<nums.length;i++){
tempList.add(nums[i]);
backTracking(nums, k-1, target, i+1, result, tempList);
tempList.remove(tempList.size()-1);
}
}
}
}