Subsets II

来源:互联网 发布:手办原型师 知乎 编辑:程序博客网 时间:2024/05/22 02:26

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],  []]
回溯法
public class Solution {    public List<List<Integer>> subsetsWithDup(int[] num) {        List<List<Integer>> res = new ArrayList<List<Integer>>();        if(null == num || num.length == 0){            res.add(new ArrayList<Integer>());            return res;        }        Arrays.sort(num);        boolean[] visited = new boolean[num.length];        for(int i = 0;i <= num.length;i++){            helper(res,new ArrayList<Integer>(),num,0,i,visited);        }        return res;    }    public void helper(List<List<Integer>> res,List<Integer> tem,int[] num,int start,int level,boolean[] visited){        if(level == 0){            res.add(new ArrayList<Integer>(tem));            return;        }        for(int i = start;i < num.length;i++){            if(i > 0 && num[i] == num[i-1] && !visited[i-1]){                continue;            }            tem.add(num[i]);            visited[i] = true;            helper(res,tem,num,i+1,level-1,visited);            tem.remove(tem.size()-1);            visited[i] = false;        }    }}
0 0