ジグザグイテレータII

説明

フォローアップ  ジグザグ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())。
 *出力結果
 * /

  

おすすめ

転載: www.cnblogs.com/FLAGyuri/p/12078563.html