zoukankan      html  css  js  c++  java
  • 90.Subsets II

    题目链接:https://leetcode.com/problems/subsets-ii/description/

    题目大意:与78题一样,只是这里给出的数组中有重复数字。

    法一(借鉴):利用78题的法一,进行与47题类似的剪枝去重操作。也就是排序,判断前一个元素等。代码如下(耗时4ms):

     1     public List<List<Integer>> subsetsWithDup(int[] nums) {
     2         List<List<Integer>> list = new ArrayList<List<Integer>>();
     3         List<Integer> tmp = new ArrayList<Integer>();
     4         Arrays.sort(nums);
     5         dfs(list, tmp, nums, 0);
     6         return list;
     7     }
     8     public static void dfs(List<List<Integer>> list, List<Integer> tmp, int[] nums, int start) {
     9         list.add(new ArrayList<Integer>(tmp));
    10         for(int i = start; i < nums.length; i++) {
    11             //剪枝,这里i!=start还没怎么看懂,但是不能使用i>0的判断
    12             if(i != start && nums[i] == nums[i - 1]) {
    13                 continue;
    14             }
    15             tmp.add(nums[i]);
    16             dfs(list, tmp, nums, i + 1);
    17             tmp.remove(tmp.size() - 1);
    18             
    19         }
    20     }
    View Code

    法二:并没有剪枝,而是在计算完所有的集合后,与结果集进行判断,如果结果集中没有,则加入结果集,否则跳过。代码如下(耗时61ms):

     1     public List<List<Integer>> subsetsWithDup(int[] nums) {
     2         List<List<Integer>> list = new ArrayList<List<Integer>>();
     3         List<Integer> tmp = new ArrayList<Integer>();
     4         Arrays.sort(nums);
     5         dfs(list, tmp, nums, 0);
     6         return list;
     7     }
     8     public static void dfs(List<List<Integer>> list, List<Integer> tmp, int[] nums, int start) {
     9         if(!list.contains(tmp)) {//与结果集进行判断
    10             list.add(new ArrayList<Integer>(tmp));
    11         }
    12         for(int i = start; i < nums.length; i++) {
    13             tmp.add(nums[i]);
    14             dfs(list, tmp, nums, i + 1);
    15             tmp.remove(tmp.size() - 1);
    16         }
    17     }
    View Code
  • 相关阅读:
    ios7--UIImageView
    ios6--UILabel
    ios5--计算器
    ios4--UIView的常见属性(尺寸和位置)
    ios2--UIView的常见属性
    PG数据库获取最近四个小时 使用产品的用户审计信息
    可添加头部尾部RecyclerView,很帅哦~
    http请求及缓存框架 GalHttprequest
    据说年薪30万的Android程序员必须知道的帖子
    Android显示GIF动画 GifView
  • 原文地址:https://www.cnblogs.com/cing/p/7881303.html
Copyright © 2011-2022 走看看