【leetcode】1286。コンビネーションのIterator

次のように内容は次のとおりです。

持っているイテレータクラスを設計します。

  • 文字列受け取るコンストラクタ  characters ソートされた個別の小文字の英文字と数字の  combinationLength 引数としてを。
  • 機能  次の()  長さの次の組み合わせを返す  combinationLength 辞書式順序に。
  • 関数  のhasNext()  戻りことを  True 次の組み合わせが存在する場合にのみ。

例:

CombinationIteratorイテレータ=新CombinationIterator( "ABC"、2); //イテレータを作成します。

iterator.next(); //戻り、 "AB" 
iterator.hasNext(); // trueを返す
iterator.next(); //戻り、 "AC" 
iterator.hasNext(); // trueを返す
iterator.next(); //戻り"BC" 
iterator.hasNext(); //返す偽

制約:

  • 1 <= combinationLength <= characters.length <= 15
  • せいぜいがあります  10^4 テストあたりの関数呼び出し。
  • 関数のすべてのコールがあることが保証だ  next 有効です。

問題解決のアイデア:すべて事前に配置された問題の完全な配列は、計算することができます。

コードは以下の通りであります:

クラスCombinationIterator(オブジェクト):

    デフ __init__ (自己、文字、combinationLength):
         "" " タイプ文字:STR 
        :タイプcombinationLength:INT 
        """ 
        self.val = []
         から itertools インポートの組み合わせ
         のために I における組み合わせ(文字、combinationLengthを):
            self.val.append('' .join(i))を

    デフ次の(自己):
         "" " 
        :RTYPE:STR 
        """ 
        リターンself.val.pop(0)
        

    デフのhasNext(自己):
        "" " 
        :RTYPE:ブール
        """ 
        リターンでlen(self.val)> 0 
        


あなたのCombinationIteratorオブジェクトをインスタンス化し、そのように呼ばれます:OBJ = CombinationIterator(文字、combinationLength) PARAM_1 = obj.next() PARAM_2 = obj.hasNext()

 

おすすめ

転載: www.cnblogs.com/seyjs/p/12041872.html