【Java】subsets

来源:互联网 发布:如何关闭4g网络 编辑:程序博客网 时间:2024/04/30 13:37
/** * Created on 16/6/6. */import java.util.ArrayList;import java.util.Arrays;public class getSubsets {    public static void main(String[] args) {        ArrayList<Integer> s = new ArrayList<Integer>();        s.add(1);        s.add(2);        s.add(3);        ArrayList<ArrayList<Integer>> allsubsets = getSubsets(s);        System.out.println(allsubsets);        int[] nums = {1,2,3};        ArrayList<ArrayList<Integer>> subsets = subsets(nums);        System.out.println(subsets);        ArrayList<ArrayList<Integer>> anotherSubsets = anotherSubsets(nums);        System.out.println(anotherSubsets);    }    public static ArrayList<ArrayList<Integer>> anotherSubsets(int[] nums) {        if (nums == null) {            return null;        }        Arrays.sort(nums);        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();        for (int i = 0; i < nums.length; i++) {            ArrayList<ArrayList<Integer>> temp = new ArrayList<>();            for (ArrayList<Integer> a : result) {                temp.add(new ArrayList<Integer>(a));            }            for (ArrayList<Integer> a : temp) {                a.add(nums[i]);            }            ArrayList<Integer> single = new ArrayList<Integer>();            single.add(nums[i]);            temp.add(single);            result.addAll(temp);            System.out.println(result);        }        result.add(new ArrayList<>());        return result;    }    public static ArrayList<ArrayList<Integer>> subsets(int[] nums) {        ArrayList<ArrayList<Integer>> list = new ArrayList<>();        Arrays.sort(nums);        backTrack(list, new ArrayList<>(), nums, 0);        return list;    }    public static void backTrack(ArrayList<ArrayList<Integer>> list, ArrayList<Integer> tmpList, int[] nums, int start) {        list.add(new ArrayList<>(tmpList));        for (int i = start; i < nums.length; i++) {            tmpList.add(nums[i]);            backTrack(list, tmpList, nums, i + 1);            tmpList.remove(tmpList.size() - 1);        }    }    public static ArrayList<ArrayList<Integer>> getSubsets(ArrayList<Integer> subset) {        ArrayList<ArrayList<Integer>> sub = new ArrayList<>();        int m = 1 << subset.size();        for (int i = 0; i < m; i++) {            ArrayList<Integer> s = new ArrayList<>();            int k = i;            int index = 0;            while (k > 0) {                if ((k & 1) > 0) {                    s.add(subset.get(index));                }                k >>= 1;                index ++;            }            sub.add(s);        }        return sub;    }}

0 0