leetcode_40 组合总数II

news/2024/7/5 18:35:14 标签: leetcode, 算法, 职场和发展

1. 题意

找到所有可能的组合数,只是不能重复选择同一元素。

组合总数II

2. 题解

2.1 我的解法

leetcode39的基础上,再加上一个标记数组即可。

class Solution {
public:
    void gen(vector<vector<int>> &res, vector<int>& candidates, vector<int> &vis, 
        vector<int> &seq, int target)
        {
            if (target == 0) {
                res.push_back(seq);
                return ;
            }
            if ( target < 0)
                return;

            int sz = candidates.size();
            for ( int i = 0;i < sz; ++i) {
                
                if (vis[i]) continue;
                if (i && !vis[i - 1] && candidates[i] == candidates[i - 1])
                    continue;
                if ( !seq.empty() && candidates[i] < seq[seq.size() - 1] )
                    continue;
                
                vis[i] = 1;
                seq.push_back(candidates[i]);
                gen(res, candidates, vis, seq, target - candidates[i]);
                vis[i] =  0;
                seq.pop_back();


            }
        }

    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        

        vector< vector<int> > ans;
        vector<int> seq;
        vector<int> vis(candidates.size(), 0);

        sort(candidates.begin(), candidates.end());

        gen(ans, candidates, vis, seq, target);
        
        return ans;
    }
};
2.2 另一种可能的解法

其实不需要标记数组,根据有序数组的特点和begin来进行去重。

class Solution {
public:
    void gen(vector<vector<int>> &res, vector<int>& candidates, 
        vector<int> &seq, int begin, int target)
        {
            if (target == 0) {
                res.push_back(seq);
                return ;
            }
            if ( target < 0)
                return;

            int sz = candidates.size();
            for ( int i = begin;i < sz; ++i) {
                
                if ( i > begin && candidates[i] == candidates[i - 1])
                    continue;

                seq.push_back(candidates[i]);
                gen(res, candidates, seq, i + 1,target - candidates[i]);
                seq.pop_back();


            }
        }

    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        

        vector< vector<int> > ans;
        vector<int> seq;
        vector<int> vis(candidates.size(), 0);

        sort(candidates.begin(), candidates.end());

        gen(ans, candidates,  seq, 0 ,target);
        
        return ans;
    }
};


http://www.niftyadmin.cn/n/5129417.html

相关文章

编译运行windows+OpenMVG+OpenMVS+vs2017

安装vcpkg过程需要翻墙&#xff01;&#xff01;&#xff01; github下载代码 git clone https://github.com/microsoft/vcpkg git clone https://github.com/cdcseacave/VCG.git git clone https://github.com/cdcseacave/openMVS.git src安装vcpkg包 cd .\vcpkg .\bootstr…

Java之JavaConfig

Java-JavaConfig 一&#xff0c;什么是JavaConfig 1.介绍 JavaConfig是一种用于配置Java应用程序的方法。它是Spring框架提供的一种替代XML配置的方式&#xff0c;旨在简化和增强应用程序的配置过程。 传统上&#xff0c;Spring框架使用XML文件来定义应用程序的配置信息&am…

工作流审批平台,可迁移,可快速开发审批单(源码)

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;请假审批demo从流程绘制到审批结束实例。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端分离部署开发模式&#xff0c;快速开发平…

DSP开发例程(4): logbuf_print_to_uart

目录 DSP开发例程: logbuf_print_to_uart新建工程源码编辑app.cfgos.cmain.c 调试说明 DSP开发例程: logbuf_print_to_uart SYS/BIOS 提供了 xdc.runtime.Log, xdc.runtime.LoggerBuf 和 xdc.runtime.LoggerSys 这几个模块用于日志记录. 日志信息在 应用程序调试和状态监控中非…

软考系统架构师知识点集锦六:项目管理

一、考情分析 二、考点精讲 2.1进度管理(时间管理) 进度管理:为了确保项目按期完成所需要的管理过程。 2.1.1过程 [WBS分解的基本要求] WBS的工作包是可控和可管理的&#xff0c;不能过于复杂。任务分解也不能过细&#xff0c;一般原则WBS的树形结构不超过6层。每个工作包要…

API商品数据接口调用爬虫实战

随着互联网的发展&#xff0c;越来越多的商家开始将自己的商品数据通过API接口对外开放&#xff0c;以供其他开发者使用。这些API接口可以提供丰富的商品数据&#xff0c;包括商品名称、价格、库存、图片等信息。对于爬虫开发者来说&#xff0c;通过调用这些API接口&#xff0c…

编译基于wanyland的 EFL

1. 执行配置&#xff1a; CFLAGS"-O -g -ffast-math -marchnative -ggdb3" meson --prefix$HOME/install -Dwltrue -Dx11false -Dopenglfull . build ninja -C build 遇到的错误&#xff1a; 1. 找不到 wayland-client: 解决方法&#xff1a; 安装 libwa…

Knife4j使用教程(四) -- Controller类的配置注解

目录 1. @API注解 2. @ApiOperation()注解 3. @ApiOperationSupport注解 4. @ApiParam注解 5. @ApiImplicitParams注解 与 @ApiImplicitParam注解<