题目:子集

来源:互联网 发布:乐知英语待遇 编辑:程序博客网 时间:2024/04/25 11:27


给定一个含不同整数的集合,返回其所有的子集

您在真实的面试中是否遇到过这个题?

Yes





样例

如果 S = [1,2,3],有如下的解:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

注意

子集中的元素排列必须是非降序的,解集必须不包含重复的子集

标签 Expand   



解题思路:
使用DFS深度搜索加递归。
由于数组中的数据只有2种选择,要或者不要。
先排序,然后DFS加递归

class Solution {    /**     * @param S: A set of numbers.     * @return: A list of lists. All valid subsets.     */    public ArrayList<ArrayList<Integer>> subsets(ArrayList<Integer> S) {        // write your code here        ArrayList<ArrayList<Integer>> res = new ArrayList<>();         if(null==S||0==S.size()) return res;         Collections.sort(S);         ArrayList<Integer> tmp = new ArrayList<Integer>();         DFSsubsets(S,0, res, tmp);         return res;    }    public void  DFSsubsets(ArrayList<Integer> S, int  n,ArrayList<ArrayList<Integer>> res,ArrayList<Integer> tmp){         if(n==S.size()){              res.add((ArrayList<Integer>) tmp.clone());              return;         }         //不要该数字         DFSsubsets(S, n+1, res, tmp);         //要该数字         tmp.add(S.get(n));         DFSsubsets(S, n+1, res, tmp);         tmp.remove(tmp.size()-1);    }   } 

0 0
原创粉丝点击