首页 > 其他 > 详细

Jan 23 - Subsets II; Array; BackTracking;

时间:2016-01-24 12:53:23      阅读:151      评论:0      收藏:0      [点我收藏+]

We can easily use hashset to solve this problem, based on the previous Subset problem.

Code:

public class Solution {
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        Arrays.sort(nums);
        int len = nums.length;
        Set<List<Integer>> set = new HashSet<>();
        for(int i = 0; i < len; i++){
            List<Integer> list = new ArrayList<>();
            addSubset(nums, len-1, 0, i+1, list, set);
        }
        List<Integer> list = new ArrayList<>();
        set.add(list);
        return new ArrayList<>(set);
    }
    
    public void addSubset(int[] nums, int n, int cur, int k, List<Integer> list, Set<List<Integer>> set){
        if(k == 0){
            set.add(new ArrayList<>(list));
            return;
        }
        
        list.add(nums[cur]);
        addSubset(nums, n, cur+1, k-1, list, set);
        list.remove(list.size()-1);
        if(cur == n-k+1) return;
        addSubset(nums, n, cur+1, k, list, set);
    }
}

 

A way which do not need to use hashset

code:

public class Solution {
public List<List<Integer>> subsetsWithDup(int[] nums) {
Arrays.sort(nums);
int len = nums.length;
List<List<Integer>> set = new ArrayList<>();
for(int i = 0; i < len; i++){
List<Integer> list = new ArrayList<>();
addSubset(nums, len-1, 0, i+1, list, set);
}
List<Integer> list = new ArrayList<>();
set.add(list);
return set;
}

public void addSubset(int[] nums, int n, int cur, int k, List<Integer> list, List<List<Integer>> set){
if(k == 0){
set.add(new ArrayList<>(list));
return;
}


for(int i = cur; i < nums.length - k + 1; i++){
if(i != cur && nums[i] == nums[i-1]) continue;
list.add(nums[i]);
addSubset(nums, n, i+1, k-1, list, set);
list.remove(list.size()-1);
}
/*
addSubset(nums, n, cur+1, k-1, list, set);
list.remove(list.size()-1);
if(cur == n-k+1) return;
addSubset(nums, n, cur+1, k, list, set);
*/
}
}

Jan 23 - Subsets II; Array; BackTracking;

原文:http://www.cnblogs.com/5683yue/p/5154935.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!