zoukankan      html  css  js  c++  java
  • #leetcode刷题之路40-组合总和 II

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
    candidates 中的每个数字在每个组合中只能使用一次。
    说明:
    所有数字(包括目标数)都是正整数。
    解集不能包含重复的组合。

    示例 1:
    输入: candidates = [10,1,2,7,6,1,5], target = 8,
    所求解集为:
    [
    [1, 7],
    [1, 2, 5],
    [2, 6],
    [1, 1, 6]
    ]

    示例 2:
    输入: candidates = [2,5,2,1,2], target = 5,
    所求解集为:
    [
    [1,2,2],
    [5]
    ]

    也就是把之前的39题加一个避免重复而已:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using  namespace std;
    static int i=0;
    
    void recurrent(vector<int>& candidates,int target,int addr,vector<vector<int>>& ans,vector<int>& temp)//addr为当前遍历到的位置,
    {
        if(target==0)
        {
    //        if(temp.size()==1)
    //        cout<<temp[0]<<endl;
    //        if(temp.size()==3)
    //            cout<<temp[0]<<temp[1]<<temp[2]<<endl;
            if(find(ans.begin(),ans.end(),temp)==ans.end()) ans.push_back(temp);//避免重复
            return;
        }
        if(target<0) return;
        for(int i=addr;i<candidates.size();i++)
        {
            target-=candidates[i];
            temp.push_back(candidates[i]);
            recurrent(candidates,target,i+1,ans,temp);
            temp.pop_back();//还原,以继续遍历
            target+=candidates[i];
        }
    }
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        vector<vector<int>> ans;
        int count=candidates.size();
        if(count==0||target<0) return ans;
        vector<int> temp;
        sort(candidates.begin(),candidates.end());//排序,避免重复
        recurrent(candidates,target,0,ans,temp);
        return ans;
    }
    
    int main() {
        vector<int> candidates={2,5,2,1,2};
        vector<vector<int>> ans=combinationSum2(candidates,5);
        std::cout << ans.size()<< std::endl;
        return 0;
    }
  • 相关阅读:
    整数的溢出或回绕
    C语言每日一题
    C语言刷“矩阵”类题目(2维矩阵/2级指针)
    C语言刷2数/3数/4数之和
    C语言刷数组题记录
    二、IAR创建工程并进行烧写
    三、STM8的学习笔记-----GPIO操作
    51单片机--------如何使用keil软件建立一个工程
    一、搭建mosquitto
    二、解决端口占用被占用情况
  • 原文地址:https://www.cnblogs.com/biat/p/10606558.html
Copyright © 2011-2022 走看看