Leetcode 90. Subsets II

来源:互联网 发布:c语言api教程 编辑:程序博客网 时间:2024/06/02 09:07

iven a collection of integers that might contain duplicates, nums, 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 nums = [1,2,2], a solution is:

[  [2],  [1],  [1,2,2],  [2,2],  [1,2],  []]

这道题最大的特点就是不能重复。就是只能有一个2,或者两个2,但是结果中不能出现有两个一个2在result set 中

所以这个题和之前的subset的区别就是将同一个结果统一起来,

还有一种方法就是可以利用之前已经得到的结果来

public class Solution {    public List<List<Integer>> subsetsWithDup(int[] nums) {      List<List<Integer>> result = new ArrayList<List<Integer>>();      HashMap<Integer, Integer> record = new HashMap<Integer, Integer>();      List<Integer>tem = new ArrayList<Integer>();      int length = nums.length;      if(length <= 0)        return result;      result.add(tem);      for(int i = 0; i < length; i++){        if(record.containsKey(nums[i])){          record.put(nums[i],record.get(nums[i] + 1));        }        else{          record.put(nums[i],1);        }      }      Set<Integer> keys = record.keySet();      Iterator iterator = keys.iterator();      //we can use the original set and then add a new element and then add the result to the result set.      while(iterator.hasNext()){        int number = (Integer)iterator.next();        int times = record.get(number);        int size = result.size();        for(int i = 0; i < size; i++){          List<Integer> originalOne = result.get(i);          for(int j = 1; j <= times; j++){            List<Integer> addednew = new ArrayList<Integer>(originalOne);            int k = j;            while(k > 0){              addednew.add(number);              k--;            }            result.add(addednew);          }        }      }      return result;    }}


0 0