Lintcode - k sum II

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.

    public ArrayList<ArrayList<Integer>> kSumII(int A[], int k, int target) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        helper(result, new ArrayList<Integer>(), A, k, target, 0, 0);
        return result;
    }
    
    void helper(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> preResult,
                int A[], int k, int target, int count, int start) {
        if (count == k && target == 0) {
            result.add(preResult);
            return;
        }
        if (count >= k || target < 0) {
            return;
        }

        for (int i = start; i < A.length; i++) {
            if (target - A[i] >= 0) {
                ArrayList<Integer> newResult = new ArrayList<Integer>(preResult);
                newResult.add(A[i]);
                helper(result, newResult, A, k, target-A[i], count+1, i+1);
            } else {
                break;
            }
        }
    }




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章