LeetCode 78. Subsets

本题的题意是根据输入构造输入能构成的所有的子集。很明显可以用回溯法来解决,一个数字一个数字地遍历,然后从0到最大长度决定子集的长度len,然后进行dfs开始搜索,加入当前元素后再从当前元素的后一个元素开始加入长度为len-1的子集,依次遍历下去即可。

代码如下:

class Solution {
    public List> subsets(int[] nums) {
        
        int len=nums.length;
        List> result= new ArrayList>();
        List set=new ArrayList();
        result.add(set);
        
        for (int i=0;i set1=new ArrayList();
                dfs(result,set1,nums,i,j);
            }
        }
        return result;
            
    }
    
    public void  dfs(List> result, List now, int []nums, int pos,int len)
    {
        if (pos+len-1>=nums.length)  return;
        
         now.add(nums[pos]);
        if (len==1) 
       {
           result.add(now);
           return;
       }
        
        
        for (int i=pos+1;i now1=new ArrayList(now);
            dfs(result,now1,nums,i,len-1);
        }
        
    }
}

 

你可能感兴趣的:(LeetCode)