78. Subsets 【LeetCode算法之旅之深度优先搜索】

    xiaoxiao2021-03-25  86

    Given a set of distinct integers, nums, return all possible subsets.

    Note: The solution set must not contain duplicate subsets.

    For example, If nums = [1,2,3], a solution is:

    [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]

    题意:给出一个集合,该集合的所有子集。

    算法思路:从集合的第一个数开始,都分为两种情况,取或不取,一直搜索到最后一个数,得到2的n次方个集合,注意空集的存在。

    java实现代码:

    package leetcode; import java.util.ArrayList; import java.util.List; public class Solution { private List<List<Integer>> list = new ArrayList<List<Integer>>(); private void dfs(int index, int[] nums, List<Integer> subList){ if(index == nums.length){//递归结束 this.list.add(subList);//将得到的子集放入List return; } dfs(index + 1, nums, subList);//不取当前数直接往下递归 List<Integer> subList2 = new ArrayList<Integer>(); subList2.addAll(subList);//复制一份List对象 subList2.add(nums[index]);//取当前数 dfs(index + 1, nums, subList2); } public List<List<Integer>> subsets(int[] nums) { List<Integer> subList = new ArrayList<Integer>(); dfs(0, nums, subList); return list; } }

    转载请注明原文地址: https://ju.6miu.com/read-15364.html

    最新回复(0)