首页 > 其他分享 >子集(递归)

子集(递归)

时间:2025-01-07 21:12:33浏览次数:1  
标签:begin 递归 nums dfs vector 子集 ans path

题目链接:https://leetcode.cn/problems/subsets-ii/submissions/591733085/

题意:

给你一个数组,输出不同数字的组合(若两个组合都挑一个1,一个2,无论顺序如何,只输出一个)

思路:

先排序,将不同数字分组,再讨论每组选0,1,2,...n个的情况

class Solution {
public:

    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<vector<int>>ans;
        sort(nums.begin(),nums.end());
        vector<int>path;
        dfs(ans,path,nums,0);
        
        return ans;
    }
    void dfs(vector<vector<int>>&ans,vector<int>path,vector<int>nums,int i)
    {
       if(i==nums.size())
       {
            ans.push_back(path);
            return;
       } 
       auto temp=upper_bound(nums.begin(),nums.end(),nums[i]);
       int k= temp==nums.end()? nums.size():temp-nums.begin();

       dfs(ans,path,nums,k);
       for(;i<k;i++)
       {
        path.push_back(nums[i]);
        dfs(ans,path,nums,k);
       } 
    }
};

标签:begin,递归,nums,dfs,vector,子集,ans,path
From: https://www.cnblogs.com/benscode/p/18658380

相关文章

  • 爬楼梯(动态规划/递归)
    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶。1.1阶+1阶2.2阶示例2:输入:n=3输出:3解释:有三种方法可以爬到楼顶。1.1阶+1阶+......
  • [20250103]使用递归实现distinct功能.txt
    [20250103]使用递归实现distinct功能.txt--//生产系统遇到实际上许多条类似语句,顺便拿其中几个出来,真心不知道开发如何学计算机的。1.问题提出:SYS@127.0.0.1:9106/xtdb/xtdb2>@sql_idc29undaquszs6--SQL_ID=c29undaquszs6comefromsharedpoolselectdistinctritemfrom......
  • 分披萨,关键在于吃货可能取左或者取右,利用max(递归调用左边,递归调用右边),相当于暴力获取
    #include<bits/stdc++.h>usingnamespacestd;intn;//披萨个数intpizza[500];//n个披萨大小longcache[500][500];intcheck(intid){  if(id<0)    id=n-1;//若取走披萨第一块的左边,则循环相当于最后一块  if(id>=n)  {    id=0;//......
  • 【初阶数据结构与算法】排序算法总结篇(每个小节后面有源码)(直接插入、希尔、选择、堆
    文章目录一、直接插入排序二、希尔排序三、直接选择排序四、堆排序五、冒泡排序六、快速排序七、归并排序八、计数排序九、非递归快速排序十、非递归归并排序本篇内容将从稳定性与复杂度等角度分析排序算法,列出它们的特点、优点以及缺点,希望大家有所收获,如果想更加细......
  • 函数递归与栈帧的创建与销毁
    目录函数递归函数栈帧的创建与销毁概述 main函数栈帧的创建变量的创建如何传参子函数栈帧的创建函数如何返回值(1)子函数栈帧的销毁函数如何返回值(2)函数递归将复杂的问题层层化为与原问题相似的规模较小的问题。递----递推、归----回归 递推:函数一直......
  • 用仓颉完成编译原理实验-消除左递归和左公共因子,求FIRST集和FOLLOW集
    目录实验目的实验内容实现消去上下文无关文法中所有左递归的算法实现从上下文无关文法中提取左公共因子的算法实现求解上下文无关文法的FIRST集和FOLLOW集的算法设计方案与算法描述设计文法的数据结构实现消去上下文无关文法中所有左递归的算法实现从上下文无关文法中......
  • 递归深入——再论函数自我调用(附5道题型详细解析及代码)
    递归基础:一、什么是递归?递 归 :函数的自我调用;数列递归:如果一个数列的项与项之间存在关联性,那么可以使用递归实现;原理:如果 一 个函数可以求A(n),   那么该函数就可以求A(n-1),  就形成了递归调用; 注 意 :一般起始项是不需要求解的,是已知条件;递归求解问题......
  • 子集(回溯)
    给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例1:输入:nums=[1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例2:输入:nums=[0]输出:[[],[0]] class......
  • 【初阶数据结构与算法】八大排序之非递归系列( 快排(使用栈或队列实现)、归并排序)
    *文章目录一、非递归版快排1.使用栈实现非递归版快排2.使用队列实现非递归版快排二、非递归版归并排序1.非递归版归并排序的实现一、非递归版快排1.使用栈实现非递归版快排   在学习非递归版快排前,建议大家先学习递归版的快排,否则非递归版的快排将很难理解,这......
  • 代码随想录——动态规划13.分割等和子集
    思路难点我只想到了:“找一个子集,每个数取或不取求其和,看是否和另一个子集的和相等”但是实际上既然是两个子集相等,那么只要和等于sum/2即可了!取或不取用01背包,但是不知道怎么用。只有确定了如下四点,才能把01背包问题套到本题上来。背包的体积为sum/2背包要放入的商......