LeetCode幸せブラシタイトル二十から五日間--47。順列II

47.順列II

重複を含む可能性のある数字の集合を考えると、すべての可能なユニークな順列を返します。

例:

入力:[1,1,2] 
出力
  [ [1,1,2]、
  [1,2,1]、
  [2,1,1] 
]
容認されました
257204
提出
622317
 
C ++方法:
  これが最後の46にあまりにも似ているので、これだけのベクター内の重複を削除するには、「設定」しましょう
  私たちは、この方法を使用します
  これはパフォーマンスの低下であるpass.Butことができ、元のコードを変更するには、このメソッドを使用します
#include < セット > 
の#include <ベクトル> 
の#include <iostreamの>
 使用して 名前空間STDを、


INT メイン()
{ 
ベクトル < INT > VEC。
VEC = { 123489321048 }。
//ループのためだけに、再びベクトルに設定し評価し、VECセットを与える最後に始めましょう
設定 < int型> ST(vec.begin()、vec.end())。 vec.assign(st.begin()、st.end())。 ベクトル < 整数 > ::イテレータit。 以下のために(;それ= vec.end();!それは)(vec.beginを=それ++
//&アドレスを意味し、*手段は、値の取得 はcout
<< *それ<< てendlを。 リターン 0 ; }
する#include <stdio.hに> 
する#include <iostreamの> 
する#include < ストリング > 
の#include <ベクトル> 
の#include < 設定 >
 使用して 名前空間STD。
クラス解決{
 パブリック
    ベクトル <ベクトル< INT >>並び替える(ベクトル< INT >&NUMS){
         セット <ベクトル< INT >> RES。
        ベクトル <ベクトル< int型 >> RES1。
        ベクトル < 整数 > うち0 )。
        DFS(うち、NUMS、解像度、訪問、0 ); 
        res1.assign(res.begin()、res.end())。
        リターンRES1。
    } 

    ボイド DFS(ベクトル< INT >&アウト、ベクトル< INT >&NUMS、設定 <ベクトル< INT >>&RES、ベクトル< INT >&訪問し、int型のラベル)
    { 
        場合(ラベル== nums.size()) {res.insert(アウト)。返す;}
         ためint型 I = 0 ; iが(nums.sizeを<); iが++ 
        {
            場合(訪問[I] == 1続けますアウト.push_back(NUMS [I])。
            訪問[I] = 1 
            DFS(うち、NUMS、解像度は、ラベル+、訪問した1 )。
            アウト.pop_back(); 
            [i]が訪れた = 0 ; 
        } 
        を返します

    } 
}。
INT メイン()
{ 
    溶液S。
    ベクトル < int型 > V。
    ベクトル <ベクトル< int型 >> RES。 
    v.push_back( 1 )。
    v.push_back(1 )。
    v.push_back(2 )。
//     v.push_back(1)。
//     v.push_back(4)。
    RES = s.permute(V)。
    以下のための(ベクトル<ベクトル< int型 >> ::)それは(res.beginを=イテレータ、それ= res.end();!++ それ){
         のためにint型私は= 0 ;私は<(*それ).size( ); ++ I)
            はcout <<(*それ)[I] << "  " ; 
        coutの << てendl; 
        } 
    // COUT << RES << ENDL。
    リターン 0  ;
}

 

おすすめ

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