19日--39質問を磨くために満足しLeetCode。コンビネーションSum40。コンビネーション合計II

39.コンビネーション合計

候補数の組(与えられたcandidates(重複なし))とターゲット番号(target)内のすべてのユニークな組み合わせを見つける  candidates の候補数の合計  target

同じ繰り返し数は、から選択することができる  candidates 回数無制限の数。

注意:

  • (を含むすべての数値  target)は、正の整数になります。
  • ソリューションセットは、重複の組み合わせを含めることはできません。

例1:

入力:候補= [2,3,6,7], ターゲット= 7
解集合である:
[ 
  [7]、
  [2,2,3-] 
]

例2:

入力:候補= [2,3,5] , ターゲット= 8、
ソリューションセットである:
[ 
  [2,2,2,2]、
  [2,3,3]、
  [3,5] 
特別ポイント:
1。
空pop_back();删除最后一个元素
2.栈、队列用プッシュ、ベクトル用の一back
あなたは奇妙な問題に直面3.Ifは、それが次のエラーの他の理由のため、かもしれませんが、そうするとき
、あなたはそれを解決する方法がわかりませんただ、コンパイラを信じて、よりerror.Don'tを読む.Just。
4.This機能は、このように我々は変更することができ、ベクトルの定義を追加&後に必要な
ベクトルの値そのものを。
ループのための2つの5.use、出力するベクトルの値<ベクトル<INT >>
する#include <stdio.hに> 
する#include <iostreamの> 
する#include <ベクトル> 
の#include <アルゴリズム> 
の#include <スタック> 
の#include < ストリング > 
の#include <メモリ> 
の#include <memory.h>
 使用して 名前空間STD。
クラスのソリューション{
 パブリック
    ベクトル <ベクトル< int型 >> combinationSum(ベクトル< int型 >&候補者、int型のターゲット){ 
        ベクトル <ベクトル< int型 >> ANS; 
        ベクトル <CUR; 
        ソート(candidates.begin()、candidates.end()); 
        DFS(候補者、ターゲット、0 、CUR、ANS)。
        戻るANSを。

    } 

プライベートボイド DFS(ベクトル< INT >&候補、int型のターゲット、INT S、ベクトル< INT >&CUR、ベクトル<ベクトル< INT >>&ANS)
    { 
        場合(目標== 0 
        { 
            ans.push_back(CUR ); 
            返します
        } 
        のためにint型 I = sで、iがcandidates.sizeを<(); ++ i)が
        {
            もし(候補[I]>ターゲット)ブレーク
            cur.push_back(候補[I]); 
            DFS(候補ターゲット - 候補[i]は、I、CUR、ANS)。
            cur.pop_back(); 
        } 

    } 


}。
INT メイン()
{ 
    溶液S。
    ベクトル <ベクトル< int型 >> RES。
    ベクター < INT >候補= { 235 }。
    RES = s.combinationSum(候補、8 )。
    ベクトル < int型 >temp_vect;
    以下のための(ベクトル<ベクトル< int型 >> ::イテレータITE = res.begin()!; ITE = res.end(); ITE ++ 
    { 
        temp_vect = * ITE;
        以下のために(ベクトルは< 整数 > ::イテレータITEEはtemp_vect.beginを()=;!ITEE = temp_vect.endを(); ITEE ++ 
        { 
            coutの << * ITEE。
        } 
        COUT << ENDL。
    } 
    戻り 0 
}

 

40.コンビネーション合計II

候補数の収集(考えるcandidates)とターゲット番号(target)、内のすべてのユニークな組み合わせを見つける  candidates に候補数の合計  target

各数は  candidates 組み合わせのみで一度使用することができます。

注意:

  • (を含むすべての数値  target)は、正の整数になります。
  • ソリューションセットは、重複の組み合わせを含めることはできません。

例1:

入力:候補=  [10,1,2,7,6,1,5]、ターゲット=  8
解集合である:
[ 
  [1,7]、
  [1、2、5]、
  [2,6]、
  [1,1]、[6] 
]

例2:

入力:候補= [2,5,2,1,2]、目標= 5、
解集合である:
[ 
  [1,2,2]、
  [5] 
]
 特別なアイデアは:
この問題は、おそらく39である
我々は唯一変更する必要がある
-それが唯一の一意の値を格納することができ、set.Setは特別な属性を持っている」とソートされます1.vectorを
自動的に。
2.戻り値を直接返すことができない、それは横方向する必要がベクトルとして<ベクトル<int型>>(ans.begin()、ans.end());
3. DFS機能でベクトルの属性も対応する変更する必要があります。
私は+ 1に変更する必要がある4。再帰的には、自分自身を追加しないことを意味します。
する#include <stdio.hに> 
する#include <iostreamの> 
する#include <ベクトル> 
の#include <アルゴリズム> 
の#include <スタック> 
の#include < ストリング > 
の#include <メモリ> 
の#include <memory.h> 
の#include <hash_map> 含める <マップ> 
書式#include < 設定 > 
書式#include <unordered_map>
 使用して 名前空間はstdを、
クラスのソリューション{
 パブリック
    ベクトル <ベクトル< int型 >> combinationSum2(ベクトル<ターゲット){
         セット <ベクトル< INT >> ANS。
        ベクトル < int型 > CUR。
        ソート(candidates.begin()、candidates.end()); 
        DFS(候補者、ターゲット、0 、CUR、ANS)。

        リターンベクトル<ベクトル< int型 >> (ans.begin()、ans.end()); 

    } 

プライベートボイド DFS(ベクトル< INT >&候補、int型のターゲット、INT S、ベクトル< INT >&CUR、設定 <ベクトル< INT >>&ANS)
    { 
        もし(ターゲット== 0 
        { 
            ans.insert(CUR)。
            // ans.push(CUR)。
            返します
        } 
        のためのint型 I = Sは、iが<(candidates.sizeを); ++ I)
        { 
            場合(候補[I]>ターゲット)ブレーク
            cur.push_back(候補[I]); 
            DFS(候補ターゲット -candidates [i]は、I + 1 、CUR、ANS)。
            cur.pop_back(); 
        } 

    } 


}。
INT メイン()
{ 
    溶液S。
    ベクトル <ベクトル< int型 >>解像度; 
    ベクター < INT >候補= { 10127615 }。
    RES = s.combinationSum(候補、8 )。
    ベクトル < int型 > temp_vect。
    以下のための(ベクトル<ベクトル< int型 >> ::イテレータITE = res.begin()!; ITE = res.end(); ITE ++ 
    { 
        temp_vect = * ITE;
        以下のための(ベクトル< int型 ITEE = temp_vect.end();;!> ::)ITEEは(temp_vect.beginを=イテレータITEE ++
        { 
                COUT << * ITEE。
        } 
        COUT << ENDL。
    } 
    戻り 0 
}
 
 

 

 

おすすめ

転載: www.cnblogs.com/Marigolci/p/11204647.html