• Subset leetcode java


    题目

    Given a set of distinct integers, 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,3], a solution is:

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

    题解:
    一个思路就是套用combination的方法,其实combination那道题就是在求不同n下的subset,这里其实是要求一个集合罢了。
    例如k=3,n=1,用combination那道题的方法求得集合是[[1], [2], [3]];
    k=3, n=2, 用combination那道题的方法求得集合是[[1, 2], [1, 3], [2, 3]]
    k=3, n=3, 用combination那道题的方法求得集合是[[1,2,3]]
    所以上述3个集合外加一个空集不就是
    [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
    么?
    只需要在combination的外面加个循环即可。

    代码如下:
     1 public static void dfs(int[] S, int start, int len, ArrayList<Integer> item,ArrayList<ArrayList<Integer>> res){
     2         if(item.size()==len){
     3             res.add(new ArrayList<Integer>(item));
     4             return;
     5         }
     6         for(int i=start; i<S.length;i++){
     7             item.add(S[i]);
     8             dfs(S, i+1, len, item, res);
     9             item.remove(item.size()-1);
    10         }
    11 
    12     }
    13     
    14     public static ArrayList<ArrayList<Integer>> subsets(int[] S) {
    15         ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>> ();
    16         ArrayList<Integer> item = new ArrayList<Integer>();
    17         if(S.length==0||S==null)
    18             return res;
    19         
    20         Arrays.sort(S);
    21         for(int len = 1; len<= S.length; len++)
    22             dfs(S,0,len,item,res);
    23             
    24         res.add(new ArrayList<Integer>());
    25         
    26         return res;
    27     }
    Reference:http://blog.csdn.net/worldwindjp/article/details/23300545

    底下是另外一个很精炼的算法。
     1  public static void dfs(int[] S, int start, ArrayList<Integer> item,ArrayList<ArrayList<Integer>> res){
     2         for(int i=start; i<S.length;i++){
     3             item.add(S[i]);
     4             res.add(new ArrayList<Integer>(item));
     5             dfs(S,i+1, item,res);
     6             item.remove(item.size()-1);
     7         }
     8 
     9     }
    10     
    11     public static ArrayList<ArrayList<Integer>> subsets(int[] S) {
    12         ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>> ();
    13         ArrayList<Integer> item = new ArrayList<Integer>();
    14         if(S.length==0||S==null)
    15             return res;
    16         
    17         Arrays.sort(S);
    18         dfs(S,0,item,res);
    19         res.add(new ArrayList<Integer>());
    20         
    21         return res;
    22     }
     Reference:http://blog.csdn.net/u011095253/article/details/9158397


  • 相关阅读:
    读写excel的组件
    一个关于C#语言中的Property的低级BUG,花了我二十分钟
    使用wwAppConfiguration类库来轻松读写应用程序配置信息
    为因地震死难的同胞默哀
    页面执行时生成静态文件的方法
    【转载】sp_spaceused2,看库里全部表占用的物理空间
    在微软中文技术论坛 CSDN cnblogs 三个微软社区中提问
    在内网服务器中获得真正的客户端ip的方法
    深拷贝的通用方法
    你知道在word中如何将段落标记替换成其他字符吗?
  • 原文地址:https://www.cnblogs.com/springfor/p/3879830.html
Copyright © 2020-2023  润新知