leetcode子集问题

class Solution {
    public List> subsets(int[] nums) {
         
         List  result=new ArrayList();

         dfs(result,new ArrayList(),nums);

         return  result;
    }

    public void dfs(List result,List tempList,int[] nums)
    {
         result.add(new ArrayList(tempList));
         
         for(int i=0;i

如果这样写代码,[1,2,3]和[3,2,1]其实只算一个子集,但是你算了两遍

leetcode子集问题_第1张图片

 所以需要控制后面加进来的数必须索引比前面的数索引大,所以需要增加一个参数index来进行控制

如果你想dfs中传递尽量少的参数,可以将result和tempList设置为全局变量

class  Solution
{
   
    List  result=new ArrayList();
    List  tempList=new ArrayList();

    public static List> subsets(int[] nums) {

        //n个不同的元素,所以子集总共有2的n次方个
        dfs(nums,0);

        return  result;
    }

    public static void dfs(int[] nums,int index)
    {
        //不需要满了才收集,加了一个元素就可以收集
        result.add(new ArrayList(tempList));


        for(int i=index;i

你可能感兴趣的:(leetcode,leetcode)