码迷,mamicode.com
首页 > 其他好文 > 详细

Subsets

时间:2015-03-21 11:21:12      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

问题来源:https://leetcode.com/problems/subsets/

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 
 * <p>
 * ClassName Subsets
 * </p>
 * <p>
 * Description 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], [] ]
 * </p>
 * 
 * @author TKPad wangx89@126.com
 *         <p>
 *         Date 2015年3月20日 下午6:08:19
 *         </p>
 * @version V1.0.0
 *
 */
public class Subsets {
    public List<List<Integer>> subsets(int[] S) {
        List<List<Integer>> als = new ArrayList<List<Integer>>();// 返回的结果集合
        if (S == null || S.length == 0) {
            return new ArrayList<List<Integer>>();// 返回[]即可
        }
        List<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i <= S.length; i++) {
            combine(S, 0, i, list, als);// 获取组合
        }
        return als;
    }

    // 对于一个元素有两种处理方式,要么将其加入组合之中,要么认为其不在组合之中

    // 从字符数组中第begin个字符开始挑选number个字符加入list中
    public static void combine(int[] cs, int begin, int number, List<Integer> list, List<List<Integer>> als) {
        if (number == 0) {
            ArrayList<Integer> temp = new ArrayList<Integer>(list);// 新开辟一个ArrayList对象,因为als的key存的是引用,不允许修改
            Collections.sort(temp);// 升序排列
            als.add(temp);
            return;
        }
        if (begin == cs.length) {
            return;
        }
        list.add(cs[begin]);// 将当前元素加入组合之中
        combine(cs, begin + 1, number - 1, list, als);// 递归调用其后的元素
        list.remove(list.indexOf(cs[begin]));// 认为当前元素不应该加入组合之中,将其移除
        combine(cs, begin + 1, number, list, als);// 递归调用其后的元素
    }

    public static void main(String[] args) {
        // Input: [0]
        // Output: []
        // Expected: [[],[0]]
        System.out.println(new Subsets().subsets(new int[] { 1, 2, 3 }));
        // Input: [4,1,0]
        // Output: [[],[4],[1],[0],[4,1],[4,0],[1,0],[4,1,0]]
        // Expected: [[],[0],[1],[4],[0,1],[0,4],[1,4],[0,1,4]]
        System.out.println(new Subsets().subsets(new int[] { 4, 1, 0 }));
    }
}

Subsets

标签:

原文地址:http://blog.csdn.net/shijiebei2009/article/details/44513793

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!