描述
Your title here…Given n unique integers, number k (1<=k<=n) and target.
Find all possible k integers where their sum is target.
样例
给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]]
代码
使用递归,不断地组合k个数,并判断当前k个数的和与目标值的大小关系。
public class Solution {
/*
* @param A: an integer array
* @param k: a postive integer <= length(A)
* @param targer: an integer
* @return: A list of lists of integer
*/
int k,target;
int[] A;
public List<List<Integer>> kSumII(int[] A, int k, int target) {
// write your code here
List<List<Integer>> result=new LinkedList<>();
if(A==null||A.length==0){
result.add(new LinkedList<Integer>());
return result;
}
int len=A.length;
this.k=k;
this.target=target;
this.A=A;
dfs(0,new LinkedList<>(),0,result);
return result;
}
private void dfs(int i,List<Integer> list,int sum,List<List<Integer>> result){
if(sum>target){
return;
}
if(list.size()==k){
if(sum==target){
result.add(new LinkedList<Integer>(list));
}
return;
}
for(;i<A.length;i++){
list.add(A[i]);
dfs(i+1,list,sum+A[i],result);
list.remove(list.size()-1);
}
}
}