Leetcode 78 subset 求子集

题目如下:

Given a set of distinct integers, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

Example:

Input: nums = [1,2,3]
Output:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

题意显而易见,就是要求一个集合所有的子集,包括空集。

这里我准备采用回溯算法。

主要思想是,首先计算一个元素所能组成的集合,之后计算两个元素,三个元素、、、直到全集

例如: 求三个元素的集合过程大致如下,假设集合是[1,2,3,4,5]

每次从一个节点开始,子节点的编号(注意,是编号,而不是数值大小)大于父节点

以1开始

Leetcode 78 subset 求子集_第1张图片

以2开始

Leetcode 78 subset 求子集_第2张图片

以3开始

Leetcode 78 subset 求子集_第3张图片

以 4,5开始

Leetcode 78 subset 求子集_第4张图片

每当满足层数为3时,记录为true,保存该子集。

代码:

class Solution {
    public List> subsets(int[] nums) {
        List> ans=new ArrayList<>();
            int len=nums.length;
            for(int i=1;i<=len;i++){
                for(int j=0;j temp=new ArrayList();
                    digui(1, j, i,temp,len,nums,ans);
                }
            }
            ans.add(new ArrayList()); //加入空集
            return ans;
    }
    public static void digui(int step,int now_location,int deep,List temp,int len,int []nums,List> ans){

        temp.add(nums[now_location]);
        if(step==deep){
            List node=new ArrayList();
            node.addAll(temp);
            ans.add(node);
            temp.remove(step-1);
            return;
        }
        if(now_location+1

 

你可能感兴趣的:(算法)