The code is still a piece of code, but it's still slow to write.
It uses Java to sort the list. Looked for a long time, found that the use of collections.sort is very convenient.
In addition to the result of the de-weight, the use of Java HashSet.
https://leetcode.com/problems/combination-sum-ii/
PackageCom.company;ImportJava.util.*;classSolution {Map<string, set<list<integer>>>MP; int[] nums; Set<List<Integer>> Impl (intStartinttarget) {String key= "" + Start + "_" +Target; if(Mp.containskey (key)) {returnMp.get (key); } Set<List<Integer>>ret; if(Start <nums.length) {ret=NewHashset<>(); Ret.addall (Impl (Start+1, target)); } Else{ret=NewHashset<>(); } if(Start > 0) { if(target = = Nums[start-1]) {List<Integer> item =NewArraylist<>(); Item.add (Nums[start-1]); //print (item, 1);Ret.add (item); } Else if(Start < Nums.length && target > Nums[start-1]) {Set<List<Integer>> Tmpret = impl (start + 1, target-nums[start-1]); Iterator<List<Integer>> iter =Tmpret.iterator (); while(Iter.hasnext ()) {List<Integer> item =NewArraylist<>(Iter.next ()); //Print (item, 2);Item.add (nums[start-1]); Collections.sort (item); //Print (item, 3); //System.out.println ("start" + start + "target" + target);Ret.add (item); } } } /*System.out.println ("Begin ret:" + key); Iterator<list<integer>> iter = Ret.iterator (); while (Iter.hasnext ()) {print (Iter.next (), 4); } System.out.println ("END ret:" + key);*/Mp.put (key, ret); returnret; } PublicList<list<integer>> combinationSum2 (int[] candidates,inttarget) {Nums=candidates; MP=NewHashmap<>(); List<List<Integer>> ret =NewArraylist<>(); if(Candidates.length = = 0) { returnret; } impl (0, Target); String Key= "" + 0 + "_" +Target; RET=NewArraylist<>(Mp.get (key)); returnret; } voidPrint (list<integer> item,intflag) {System.out.printf ("Here%d:", flag); Iterator ITER=Item.iterator (); while(Iter.hasnext ()) {System.out.printf ("%d,", Iter.next ()); } System.out.println (); }} Public classMain { Public Static voidMain (string[] args) {System.out.println ("Hello!"); Solution Solution=Newsolution (); int[] Cand = {10,1,2,7,6,1,5}; inttarget = 8; List<List<Integer>> ret = solution.combinationsum2 (cand, 8); System.out.printf ("Get ret:%s\n", Ret.size ()); Iterator<List<Integer>> iterator =Ret.iterator (); while(Iterator.hasnext ()) {iterator Iter=Iterator.next (). iterator (); while(Iter.hasnext ()) {System.out.printf ("%d,", Iter.next ()); } System.out.println (); } System.out.println (); }}
Combination-sum-ii (familiar with Java sorting)