[LeetCode104]Subsets

来源:互联网 发布:汉王霾表测甲醛 知乎 编辑:程序博客网 时间:2024/06/07 05:59

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],  []]
Analysis:

DFS

这个就是排列组合中的排列问题。递归如下逻辑:
Func Generate
对于输入字符串s的每一位字符
选取该字符到子集合中,并输出
如果,当前字符不是最后一位字符
递归调用Generate,处理下一位字符

Java

public class Solution {    List<List<Integer>> result;List<Integer> solu;public List<List<Integer>> subsets(int[] S) {        result = new ArrayList<>();        solu = new ArrayList<>();        Arrays.sort(S);        getSubset(S, 0);        return result;    }public void getSubset(int []S, int st){if(solu.size()<=S.length){result.add(new ArrayList<>(solu));}for(int i=st; i<S.length;i++){solu.add(S[i]);getSubset(S, i+1);solu.remove(solu.size()-1);}}}


C++

class Solution {public:    void genSet(vector<int> &S, vector<vector<int>> &result, vector<int> &solution,int level){        for(int i=level; i<S.size(); i++){            solution.push_back(S[i]);            result.push_back(solution);            if(i<S.size()-1){                genSet(S,result,solution,i+1);            }            solution.pop_back();            }    }    vector<vector<int> > subsets(vector<int> &S) {        vector<vector<int>> result;        vector<int> solution;        if(S.size() == 0) return result;        result.push_back(solution);        sort(S.begin(), S.end());                genSet(S,result, solution,0);        return result;        }};



0 0