【每日一题-leetcode】78.子集

78.子集

  1. 子集

难度中等549

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

回溯

public List<List<Integer>> subsets(int[] nums) {
            List<List<Integer>> result = new ArrayList<>();
            //1.终止条件
            if(nums == null)    return result;
            //2.递归
            dfs(result,nums,new ArrayList<>(),0);
            return result;
        }
    
        //回溯算法
        private void dfs(List<List<Integer>> result,int [] nums,List<Integer> subResult,int index){
            //1.终止条件
            if(index == nums.length){
                result.add(new ArrayList<Integer>(subResult));
                return;
            }
            //2.not pick the number at this index 
            dfs(result,nums,subResult,index+1);
            //3.add
            subResult.add(nums[index]);
            //4. pick the number at this index 
            dfs(result,nums,subResult,index+1);
            //5.撤销
            subResult.remove(subResult.size()-1);
            
        }
原文地址:https://www.cnblogs.com/qxlxi/p/12860610.html