k数和 II
题目
给定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) {
Arrays.sort(A);
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
getSumII(A,result,new ArrayList<Integer>(),0,A.length-1,k,target);
return result;
}
private void getSumII(int[] A,ArrayList<ArrayList<Integer>> result,ArrayList<Integer> list, int start, int end, int k, int target)
{
if (0 == k && 0 == target)
{
result.add(list);
}
for (int i=start;i<=end;i++)
{
if (A[i] > target)
{
break;
}
ArrayList<Integer> arr = new ArrayList<Integer>(list);
arr.add(A[i]);
getSumII(A,result,arr,i+1,end,k-1,target-A[i]);
}
}
}
Last Update 2016.10.7