コンビネーションのための1286イテレータ

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

  • 文字列受け取るコンストラクタ  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 {

優先度つきキュー PQ = <文字列> 新しい優先度つきキュー<> ();
    公共 CombinationIterator(文字列s、int型K){
        generateSub(S、K、 0、新規のStringBuilder())。
    }
    プライベート 無効 generateSub(のString、int型 lenは、int型開始、StringBuilderの結果){
         場合(LEN == 0 ){
            ()(result.toString)pq.add。
            リターン;
        }
        INT ; - ; iは++ lenのI <= s.length()iは=開始{)
            result.append(s.charAt(I));
            generateSub(S、lenを -1、I + 1 、結果)。
            result.deleteCharAt(result.length() -1 )。
        }
    }
    公共次の文字列(){
         戻りpq.poll()。
    }
    パブリック ブールのhasNext(){
         リターンpq.isEmpty();
    }
}
クラスCombinationIterator {

    キュー <文字列> QU = 新しいLinkedListの();
    文字列ORIG = "" ;
    公共 CombinationIterator(文字列の文字、int型combinationLength){
        ORIG = 文字。
        (見つける ""、0 、combinationLength)。
    }
    
    ボイド検索(文字列str、INTインデックス、INT LEN){
         場合(LEN == 0 ){
            qu.add(STR)。
            リターン;
        }
        以下のためにINT iがインデックスを=; I <orig.length(); I ++ ){
             チャー CH = orig.charAt(I)。
            (STR見つける + CH、私がlen-1を、1 + );
        }
        
    }
    
    公共次の文字列(){
         場合(!qu.isEmpty()){
             リターンqu.poll();
        }
        戻ります「」;
    }
    
    パブリック ブールのhasNext(){
         リターンqu.isEmpty();
    }
}

おすすめ

転載: www.cnblogs.com/wentiliangkaihua/p/12078968.html