Leetcode-subsets-ii ***

来源:互联网 发布:人脸识别和人工智能 编辑:程序博客网 时间:2024/05/16 05:13

回溯!!!

题目描述


Given a collection of integers that might contain duplicates, S, return all possible subsets.

Note:

  • Elements in a subset must be in non-descending order.
  • The solution set must not contain duplicate subsets.


For example,
If S =[1,2,2], a solution is:

[  [2],  [1],  [1,2,2],  [2,2],  [1,2],  []]
这是一种解答,利用递归的方式。
import java.util.*;public class Solution {    public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] num) {        ArrayList<ArrayList<Integer>> results  = new ArrayList<ArrayList<Integer>>();ArrayList<Integer> result = new ArrayList<Integer>();Arrays.sort(num);dfs(num,0,result,results);return results;    }    private void dfs(int[] num, int step, ArrayList<Integer> result,ArrayList<ArrayList<Integer>> results) {if(!results.contains(result))results.add(new ArrayList<Integer>(result));for(int i=step;i<num.length;i++){result.add(num[i]);dfs(num, i+1, result, results);result.remove(result.size()-1);}}}

下面是另一种解答:

public ArrayList<ArrayList<Integer>> subsetsWithDup1(int[] num) {ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();if(num == null || num.length == 0){return res;}Arrays.sort(num);res.add(new ArrayList<Integer>());for(int i=0; i<num.length; i++){int size = res.size();for(int j=0; j<size; j++){ArrayList<Integer> elem = new ArrayList<Integer>(res.get(j));elem.add(num[i]);if(! res.contains(elem))res.add(elem);}}return res;}

这个题目我觉得挺难的。

0 0
原创粉丝点击