Leetcode 90. Subsets II

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;
    }
}


發佈了123 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章