Given n unique integers, number k (1<=k<=n) and target. Find all possible k integers where their sum is target.
Example
Given [1,2,3,4], k=2, target=5, [1,4] and [2,3] are possible solutions.
Tags Expand
LintCode Copyright Depth First Search
和K Sum题类似,但是K Sum只能求到结果个数,但是无法获取历史路径,所以只能使用K Sum的思路一,深度搜索算法
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) {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if (A.length < k || k <= 0)
return list;
for (int i = 0; i < A.length; i++) {
if (k == 1) {
if (A[i] == target) {
ArrayList<Integer> l = new ArrayList<Integer>();
l.add(A[i]);
list.add(l);
return list;
}
} else {
int[] B = new int[A.length - i - 1];
System.arraycopy(A, i + 1, B, 0, A.length - i - 1);
ArrayList<ArrayList<Integer>> sublist = kSumII(B, k - 1, target - A[i]);
for (ArrayList<Integer> l : sublist) {
l.add(0, A[i]);
list.add(l);
}
}
}
return list;
}
}
原文地址:http://blog.csdn.net/wankunde/article/details/44058403