欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

NC27 集合的所有子集算法 java实现

程序员文章站 2024-03-16 12:58:52
...

题目描述

现在有一个没有重复元素的整数集合S,求S的所有子集
注意:
你给出的子集中的元素必须按升序排列
给出的解集中不能出现重复的元素
示例1
输入:[1,2,3]
返回值:[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]

解题思路

所有子集的排列组合,就意味着要用dfs回溯了,这里只是简单的列举组合,因此还没涉及到剪枝操作,反而比较容易些。

代码实现

import java.util.*;

public class Solution {
    public ArrayList<ArrayList<Integer>> subsets(int[] S) {
        ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
        res.add(new ArrayList<Integer>());
        ArrayList<Integer> list=new ArrayList<Integer>();
        //由于需要有顺序,所以先对数组进行排序
        Arrays.sort(S);
        dfs(0,S,res,list);
        return res;
    }

    public void dfs(int start, int[] S, ArrayList<ArrayList<Integer>> res, ArrayList<Integer> list){
        if(start>=S.length){
            return;
        }

        for(int i=start;i<S.length;i++){
        	//不需要剪枝,直接存结果集
            list.add(S[i]);
            res.add(new ArrayList<Integer>(list));
            dfs(i+1,S,res,list);
            //退回一步
            list.remove(list.size()-1);
        }
    }
}