您的位置:首页 > 编程语言 > Java开发

leetcode JAVA Subsets II 4.26 难度系数4

2014-03-10 09:58 501 查看
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 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);}}}
跟上题一样,可以2种方式加上去除重复。
第二种去重:
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) {results.add(new ArrayList<Integer>(result));for(int i=step;i<num.length;i++){if(i!=step&&num[i]==num[i-1])continue;result.add(num[i]);dfs(num, i+1, result, results);result.remove(result.size()-1);}}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 面试 leetcode