説明
フォローアップ
ジグザグIteratorを
:あなたが与えられている場合はどう
k
1Dベクトルを?どれだけあなたのコードは、このような場合に拡張することができますか?「ジグザグ」ためには、明確に定義されたとのために曖昧であるされていない
k > 2
場合。「ジグザグ」はあなたに右見ていない場合は、「サイ」と「ジグザグ」を交換してください。
例
例1
Input: k = 3
vecs = [
[1,2,3],
[4,5,6,7],
[8,9],
]
Output: [1,4,8,2,5,9,3,6,7]
例2
Input: k = 3 vecs = [ [1,1,1] [2,2,2] [3,3,3] ] Output: [1,2,3,1,2,3,1,2,3]
アイデア:
k個のポインタ、現在のサイクルの列挙の最前方要素これらのk個のポインタによって、各アレイのメンテナンス、配列の末尾へのポインタは、その後、作成しない場合は、回答シーケンス番号上で参加する各列挙プロセス
パブリッククラスZigzagIterator2 { 公共の一覧<イテレータ<整数>>その; 公共int型のターン。 / ** 1DベクトルのリストvecSの* @param * / 公共ZigzagIterator2(一覧<一覧<整数>>古いです){ //ここにデータ構造を初期化します。 this.its =新しいのArrayList <イテレータ<整数>>(); {(vecSの一覧<整数> VEC)のために (vec.size()> 0)であれば its.add(vec.iterator())。 } ターン= 0; } 次パブリックINT(){ //ここにコードを書きます INT ELEM = its.get(ターン).next(); もし(its.get(ターン).hasNext()) ターン=(ターン+ 1)%its.size()。 そうしないと { its.remove(ターン)。 (its.size()> 0)であれば ターン%= its.size()。 } ELEMを返します。 } パブリックブールのhasNext(){ //ここにコードを書きます its.sizeを返す()> 0; } } / ** *あなたのZigzagIterator2オブジェクトは、次のようなインスタンス化と呼ばれます。 * ZigzagIterator2液=(旧)新ZigzagIterator2。 *一方(solution.hasNext())result.add(solution.next())。 *出力結果 * /