Array:Combination Sum II

Given a collection of candidate numbers (C) and a target number (T),
find all unique combinations in C where the candidate numbers sums to T.
Each number in C may only be used once in the combination.

Note: All numbers (including target) will be positive integers.
Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie,a1 ≤ a2 ≤ … ≤ ak).
The solution set must not contain duplicate combinations.

public static List<List<Integer>> combinationSum2(int[] candidates, int target) {
    List<List<Integer>> lists = new ArrayList<List<Integer>>();
    if (candidates==null||candidates.length==0||target<=0) {
        return lists;
    }
    Arrays.sort(candidates);
    List<Integer> list = new ArrayList<Integer>();
    getRes1(lists, list, candidates, target, 0);
    return lists;
}
public static void getRes1(List<List<Integer>> lists,List<Integer> list,int[] arr,int target,int index) {
    if (target>0) {
        for (int i = index; i < arr.length; i++) {
            if (i > index && arr[i] == arr[i-1]) continue;
            list.add(arr[i]);
            getRes1(lists, list, arr, target-arr[i], i+1);
            list.remove(list.size()-1);
        }
    } else if (target==0) {
        lists.add(new ArrayList<Integer>(list));
    }
}

推荐阅读更多精彩内容

  • 1,从本篇文章/音频/视频中我学到的最重要的概念: 母亲经常带我去那颗松树下,陪伴我成长,交给我知识,开导我与人...
    120张明芳阅读 81评论 3 0
  • 我于2017年4月在成都参加由西经学院管理研究院组织,由王坤老师主讲的“有效演讲艺术”课程,参加完之后,从2017...
    王英1阅读 238评论 0 0
  • 毕业后工作快十年了。职场上的有些道理,并不是不明白,是我虽然知道,可是我一直在亲身验证,有些道理是不是换个地方就不...
    霹雳贝贝Suri阅读 204评论 3 1
  • 昨日个早晨起床去跑步,虽没有持续跑很远的距离,但总算是运动的,而且运动似乎有很大的魔力可以控制自己的食欲,毕竟常常...
    Sophie朵儿阅读 88评论 2 0
  • 千里梦相随,不知何人陪,繁华落寞初心其中,只愿君子陪。 秋水欲透满庭春色,放眼直至北。此时正是...
    卿诚1阅读 138评论 0 0