C++实现LeetCode(40.组合之和之二)

 更新时间:2021年07月15日 11:10:32   作者:Grandyang  
这篇文章主要介绍了C++实现LeetCode(40.组合之和之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

[LeetCode] 40. Combination Sum II 组合之和之二

Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target.

Each number in candidates may only be used once in the combination.

Note:

  • All numbers (including target) will be positive integers.
  • The solution set must not contain duplicate combinations.

Example 1:

Input: candidates = [10,1,2,7,6,1,5], target = 8,
A solution set is:
[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]

Example 2:

Input: candidates = [2,5,2,1,2], target = 5,
A solution set is:
[
[1,2,2],
[5]
]

这道题跟之前那道 Combination Sum 本质没有区别,只需要改动一点点即可,之前那道题给定数组中的数字可以重复使用,而这道题不能重复使用,只需要在之前的基础上修改两个地方即可,首先在递归的 for 循环里加上 if (i > start && num[i] == num[i - 1]) continue; 这样可以防止 res 中出现重复项,然后就在递归调用 helper 里面的参数换成 i+1,这样就不会重复使用数组中的数字了,代码如下:

class Solution {
public:
    vector<vector<int>> combinationSum2(vector<int>& num, int target) {
        vector<vector<int>> res;
        vector<int> out;
        sort(num.begin(), num.end());
        helper(num, target, 0, out, res);
        return res;
    }
    void helper(vector<int>& num, int target, int start, vector<int>& out, vector<vector<int>>& res) {
        if (target < 0) return;
        if (target == 0) { res.push_back(out); return; }
        for (int i = start; i < num.size(); ++i) {
            if (i > start && num[i] == num[i - 1]) continue;
            out.push_back(num[i]);
            helper(num, target - num[i], i + 1, out, res);
            out.pop_back();
        }
    }
};

到此这篇关于C++实现LeetCode(40.组合之和之二)的文章就介绍到这了,更多相关C++实现组合之和之二内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简单解读C++中的虚函数

    简单解读C++中的虚函数

    这篇文章主要介绍了C++中的虚函数,在C++中,虚函数联系到多态、多态联系到继承,因而虚函数是C++中的一大重要特性,需要的朋友可以参考下
    2016-04-04
  • C++多字节字符与宽字节字符相互转换

    C++多字节字符与宽字节字符相互转换

    最近在C++编程中经常遇到需要多字节字符与宽字节字符相互转换的问题,自己写了一个类来封装wchar_t与char类型间的转换
    2012-11-11
  • c++实现MD5算法实现代码

    c++实现MD5算法实现代码

    用c++实现了md5算法。包含 md5.h 和md5.cpp 两个文件。主要参考百度百科 “MD5” 原理,代码中变量命名也是参考其中的公式,程序的使用说明在md5.h 文件的末尾注释中
    2013-11-11
  • C语言 经典题目螺旋矩阵 实例详解

    C语言 经典题目螺旋矩阵 实例详解

    这篇文章主要介绍了C语言 经典题目螺旋矩阵 实例详解的相关资料,这里附有代码实例及实现效果图,需要的朋友可以参考下
    2016-12-12
  • C语言函数栈帧的创建与销毁原理图解

    C语言函数栈帧的创建与销毁原理图解

    我们知道c语言中函数都是被调用的,main函数里面能调用其他函数,其实main函数也是被别的函数调用的,下面通过本文给大家分享c语言函数栈帧的创建和销毁过程,一起看看吧
    2022-05-05
  • C++虚函数表和虚析构介绍

    C++虚函数表和虚析构介绍

    这篇文章主要介绍了C++虚函数表和虚析构,虚函数表是C++实现多态的基础,多态是面向对象的三大特性之一,下面文章我们一起来看看详细内容,需要的朋友可以参考一下
    2021-11-11
  • 模拟实现C语言中的内存管理

    模拟实现C语言中的内存管理

    这篇文章主要内容是模拟C语言中的内存管理,需要的朋友可以参考下
    2015-07-07
  • C语言动态内存管理的实现示例

    C语言动态内存管理的实现示例

    动态内存管理是一种允许程序在运行时根据需要动态申请和回收内存的策略,它提供了四种重要的函数,本文就来介绍一下,感兴趣的可以了解一下
    2024-11-11
  • Linux下用C语言实现推箱子游戏

    Linux下用C语言实现推箱子游戏

    这篇文章主要为大家详细介绍了Linux下用C语言实现小老鼠推箱子的游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 详解C语言对字符串处理函数的实现方法

    详解C语言对字符串处理函数的实现方法

    这篇文章主要为大家介绍了C语言对字符串处理函数的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12

最新评论