LeetCode第78题子集

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

分析一波题目

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

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

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

本题解题技巧

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

编码解决

java 复制代码
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);
            
        }    
    }
}

总结

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

相关推荐
码事漫谈8 分钟前
从“功能实现”到“深度优化”:金仓数据库连接条件下推技术的演进之路
后端
码事漫谈17 分钟前
数据库查询优化中的谓词下推策略与成本感知优化实践
后端
Amour恋空26 分钟前
SpringBoot+Lombok+Logback实现日志
spring boot·后端·logback
廋到被风吹走33 分钟前
【LangChain4j】特点功能及使用场景
后端·python·flask
Eward-an37 分钟前
LeetCode 239. 滑动窗口最大值(详细技术解析)
python·算法·leetcode
一叶落4381 小时前
LeetCode 50. Pow(x, n)(快速幂详解 | C语言实现)
c语言·算法·leetcode
皙然1 小时前
彻底吃透红黑树
数据结构·算法
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于Spring Boot的体育场地预约管理系统为例,包含答辩的问题和答案
java·spring boot·后端
青槿吖1 小时前
第二篇:告别XML臃肿配置!Spring注解式IOC/DI保姆级教程,从入门到真香
xml·java·开发语言·数据库·后端·sql·spring
t198751281 小时前
TOA定位算法MATLAB实现(二维三维场景)
开发语言·算法·matlab