当前位置: 首页 > article >正文

Leetcode 78. 子集(全排列的变形)

主要思路:因为本题说明数组中的元素互不相同,因此要求所有的子集,也就是讲数组里面的数进行组合就行,但是不能重复。

Python:

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        ans = []
        tmp = []
        n = len(nums)
        def dfs(start: int):
            if start > n:
                return
            ans.append(tmp[:])
            for i in range(start, n):
                tmp.append(nums[i])
                dfs(i + 1)
                tmp.pop()
        dfs(0)
        return ans

C++:

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<int> tmp;
        vector<vector<int>> ans;
        int n = nums.size();
        function<void(int)> dfs = [&](int start) {
            if (start > n) {
                return;
            }
            ans.push_back(tmp[:]);
            for (int i = start; i < n; i ++) {
                tmp.push_back(nums[i]);
                dfs(i + 1);
                tmp.pop_back();
            }
        };
        dfs(0);
        return ans;
    }
};

值的一提的是,递归起点必须是 start(如果不是的话,那么很多元素会重复的选,造成子集重复),这样可以做到去重效果!!!!

加油!!!


http://www.kler.cn/a/533767.html

相关文章:

  • 如何开发一个大语言模型,开发流程及需要的专业知识
  • JAVA_内部类
  • PyQt6/PySide6 的 QLineEdit 类
  • 如何自定义软件安装路径及Scoop包管理器使用全攻略
  • 网络爬虫会对服务器造成哪些影响?
  • 解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题
  • Gauss高斯:分布键
  • DeepSeek各版本说明与优缺点分析
  • 留学生编程辅导Haskell/OCaml/Prolog/Rust/Python
  • Linux du 命令详解:查看磁盘使用情况与高级用法 (中英双语)查看某个用户磁盘占用
  • 38. RTC实验
  • 大模型RAG优化方案_融合bm25和语义检索
  • 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信
  • RK3588——解决Linux系统触摸屏坐标方向相反问题
  • Java 网络原理 ④-路由选择 || 网段划分
  • UE求职Demo开发日志#22 显示人物信息,完善装备的穿脱
  • 限流策略实战指南:从算法选择到阈值设置,打造高可用系统
  • 算法 贪心算法
  • 计算机网络笔记再战——理解几个经典的协议3
  • C#面试常考随笔13: 泛型的主要约束和次要约束是什么?
  • 前端框架中 HTML 的应用技巧:React、Vue、Angular 深度解析
  • ollama部署deepseek实操记录
  • 多项式曲线局部路径规划及实现(python)
  • 图像特征点提取与匹配
  • Docker技术相关学习三
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)