LeetCode第78题子集

简介: 文章分享了LeetCode第78题"子集"的解法,使用递归和回溯算法遍历所有可能的子集,展示了将子集问题视为树形结构进行遍历的解题技巧。

继续打卡算法题,今天学习的是LeetCode第78题子集,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

image.png

分析一波题目

这个题目求子集,和之前做过组合相关的题目类似,因为子集也是组合,这个题目就非常简单了,还是一样的套路,我们只要把组合想成一棵树遍历就可以了。我们会发现子集就是树上所有的节点

比如[1,2,3,4] 的子集,我们用树可以表示出如下树:

image.png

树上所有的节点都是子集。

本题解题技巧

1、将子集也转换成组合问题,这样就可以通过遍历树求出子集了。

编码解决

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

        int n = nums.length;

        List<Integer> subResult= new ArrayList<>();
        getSubResult( subResult, 0,nums,n);
        return result;
    }

    public void getSubResult( List<Integer> subResult,int start,int[] nums,int n) {
   
   

        //满足了组合条件,是一个子集
        result.add(subResult);
        //遍历到最后一个元素了,除了自己,没有其他组合了,需要结束
        if(start >= n) {
   
   
            return;
        }

        for(int i=start; i<n; i++) {
   
   
            List<Integer> tempSubResult= new ArrayList<>();
            tempSubResult.addAll(subResult);
            tempSubResult.add(nums[i]);

            //递归
            getSubResult( tempSubResult, i+1,nums,n);

        }    
    }
}
AI 代码解读

总结

1、任何求组合相关的题目,可以考虑转换成树,我们把树图一画,就能想到一些解题思路

目录
打赏
0
0
0
0
41
分享
相关文章
LeetCode第90题子集II
LeetCode第90题"子集II"的解题方法,通过排序和回溯算法生成所有不重复的子集,并使用一个boolean数组来避免同一层中的重复元素,展示了解决这类问题的编码技巧。
LeetCode第90题子集II
|
6月前
|
【Leetcode刷题Python】416. 分割等和子集
LeetCode 416题 "分割等和子集" 的Python解决方案,使用动态规划算法判断是否可以将数组分割成两个元素和相等的子集。
56 1
|
6月前
|
【Leetcode刷题Python】78. 子集
LeetCode题目78的Python编程解决方案,题目要求给定一个互不相同的整数数组,返回该数组所有可能的子集(幂集),且解集中不能包含重复的子集。
36 1
LeetCode题目 90:五种算法 回溯\迭代\位掩码\字典树\动态规划实现 子集ll
LeetCode题目 90:五种算法 回溯\迭代\位掩码\字典树\动态规划实现 子集ll
|
9月前
|
leetcode代码记录(子集
leetcode代码记录(子集
41 0
|
9月前
代码随想录 Day35 动态规划04 01背包问题和完全背包问题 LeetCode T416 分割等和子集
代码随想录 Day35 动态规划04 01背包问题和完全背包问题 LeetCode T416 分割等和子集
56 0
|
9月前
【Leetcode 78】子集 —— 回溯法
回溯法解题步骤:1. 针对所给问题,定义问题的解空间;2. 确定易于搜索的解空间结构;3. 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索
|
9月前
|
Go
golang力扣leetcode 416.分割等和子集
golang力扣leetcode 416.分割等和子集
58 0
|
9月前
|
Go
golang力扣leetcode 2044.统计按位或能得到最大值的子集数目
golang力扣leetcode 2044.统计按位或能得到最大值的子集数目
51 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等