[LeetCode] Subsets

来源:互联网 发布:只有我知未删减在线看 编辑:程序博客网 时间:2024/06/07 00:59

Total Accepted: 10972 Total Submissions: 40240

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


public class Solution {    public ArrayList<ArrayList<Integer>> subsets(int[] S) {        Arrays.sort(S);                return getSubsets(S, 0);    }        public ArrayList<ArrayList<Integer>> getSubsets(int[] S, int start_index) {        ArrayList<ArrayList<Integer>> allSubsets;                if (start_index == S.length) {            allSubsets = new ArrayList<ArrayList<Integer>>();            allSubsets.add(new ArrayList<Integer>());        } else {            allSubsets = getSubsets(S, start_index + 1);                    ArrayList<ArrayList<Integer>> tmpSubsets = new ArrayList<ArrayList<Integer>>();                        for (ArrayList<Integer> subset : allSubsets) {                ArrayList<Integer> s = new ArrayList<Integer>();                s.add(S[start_index]);                s.addAll(subset);                tmpSubsets.add(s);            }                        allSubsets.addAll(tmpSubsets);        }                return allSubsets;    }    }

 

DFS

public class Solution {    public ArrayList<ArrayList<Integer>> subsets(int[] S) {        ArrayList<ArrayList<Integer>>   list = new ArrayList<ArrayList<Integer>>();        ArrayList<Integer>              path = new ArrayList<Integer>();                list.add(new ArrayList<Integer>());        Arrays.sort(S);        dfs(S, list, path, 0);                return list;    }        public void dfs(int[] S, ArrayList<ArrayList<Integer>> list, ArrayList<Integer> path, int index) {        for (int i = index; i < S.length; i++) {            path.add(S[i]);            list.add(new ArrayList<Integer>(path));            dfs(S, list, path, i + 1);            path.remove(path.size() - 1);        }    }}

public class Solution {    public ArrayList<ArrayList<Integer>> subsets(int[] S) {        ArrayList<ArrayList<Integer>>   list = new ArrayList<ArrayList<Integer>>();        ArrayList<Integer>              path = new ArrayList<Integer>();        list.add(new ArrayList<Integer>());                Arrays.sort(S);                dfs(S, list, path, 0);                return list;    }        public void dfs(int[] S, ArrayList<ArrayList<Integer>> list, ArrayList<Integer> path, int index) {        if (index < S.length) {            path.add(S[index]);            list.add(new ArrayList<Integer>(path));            dfs(S, list, path, index + 1);            path.remove(path.size() - 1);            dfs(S, list, path, index + 1);        }    }}


0 0