次のように内容は次のとおりです。
持っているイテレータクラスを設計します。
- 文字列受け取るコンストラクタ
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()