找出集合的子集,有重复元素的情况下。讨论区看到不同的代码,自己写的时候用第一种,在遍历下一个元素的时候用递归的方方式,这样比较慢。
1 | public void helper(List<List<Integer>> res, List<Integer> each, int pos, int[] n) { |
上面两种方法的结果是一样的,第二个的思路很好理解,和无重复数字时的相同,一个数字要么加,要么不加,但是递归的次数要多一些,。而第一个方法递归次数和结果一样。第一个种方法是把不加的数字,在循环中跳过,而第二中通过递归来实现。第一个是先把集合找齐,然后一个个去掉数字进行实现。第二个是从一开始添加数字时就带或者不带进行选择,当遍历到最后的数字时,完成了。第二种方法快一点。