leetcode — subsets

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Source : https://oj.leetcode.com/problems/subsets/
 *
 *
 * 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 SubSet {
    private List<List<Integer>> result = new ArrayList<List<Integer>>();

    /**
     *
     *
     * @return
     */
    public List<List<Integer>> subset (int[] arr) {
        List<Integer> set = new ArrayList<Integer>();
        Arrays.sort(arr);
        recursion(arr, 0, set);
        return result;
    }

    private void recursion (int[] arr, int index, List<Integer> set) {
        if (index == arr.length) {
            return;
        }
        for (int i = index; i < arr.length; i++) {
//            if (i < arr.length - 1 && arr[i] == arr[i+1]) {
//                continue;
//            }
            set.add(arr[i]);
            List<Integer> temp = new ArrayList<Integer>(set);
            result.add(temp);
            recursion(arr, i + 1, set);
            set.remove(set.size()-1);
        }
    }

    private static void print (List<List<Integer>> list) {
        for (List<Integer> arr : list) {
            System.out.println(Arrays.toString(arr.toArray(new Integer[arr.size()])));
        }
        System.out.println();
    }

    public static void main(String[] args) {
        SubSet subSet = new SubSet();
        int[] arr = new int[]{1,2,3};
        print(subSet.subset(arr));

    }
}
原文地址:https://www.cnblogs.com/sunshine-2015/p/7740489.html