Iterador de lista anidada aplanada NestedIterator

Título

Darle una lista anidada de números enteros. Diseñe un iterador para que pueda atravesar todos los enteros en esta lista de enteros.

Cada elemento de la lista es un número entero u otra lista. Los elementos de la lista también pueden ser números enteros u otras listas.

Ejemplo 1:

Entrada: [[1,1], 2, [1,1]]
Salida: [1,1,2,1,1]
Explicación: Al llamar repetidamente a next hasta que hasNext devuelva falso, el orden de los elementos devueltos por next debería ser: [1,1,2,1,1].

Ejemplo 2:

Entrada: [1, [4, [6]]]
Salida: [1,4,6]
Explicación: Al llamar repetidamente a next hasta que hasNext devuelva falso, el orden de los elementos devueltos por next debería ser: [1,4,6 ].

Condiciones complementarias

/**
 * // This is the interface that allows for creating nested lists.
 * // You should not implement it, or speculate about its implementation
 * public interface NestedInteger {
 *
 *     // @return true if this NestedInteger holds a single integer, rather than a nested list.
 *     public boolean isInteger();
 *
 *     // @return the single integer that this NestedInteger holds, if it holds a single integer
 *     // Return null if this NestedInteger holds a nested list
 *     public Integer getInteger();
 *
 *     // @return the nested list that this NestedInteger holds, if it holds a nested list
 *     // Return null if this NestedInteger holds a single integer
 *     public List<NestedInteger> getList();
 * }
 */

La traducción simple del párrafo anterior es crear una interfaz
IsInteger () este método, es decir, cuando el objeto NestedInteger solo tiene un número, devuelve verdadero cuando
es una lista. Es falso.
GetInteger () El objeto NestedInteger tiene solo un número. Si no devuelve nulo, el
objeto getList () NestedInteger es List, devuelve directamente un objeto NestedInteger envuelto en Lista, si es un número, devuelve nulo

Ideas para resolver problemas

No hay mucho algoritmo avanzado para este tema, también bajé a lo largo de una línea, consulte la
presentación del código ## para obtener más detalles

public class NestedIterator implements Iterator<Integer> {
    //用来存放结果
    List<Integer> list=new ArrayList<>();
    //初始化,将List封装NestedInteger对象
    public NestedIterator(List<NestedInteger> nestedList) {
        huiGui(nestedList);
    }
    //回归算法,目的就是将NestedInteger这个list中所有值都取出来放入list中
    public void  huiGui(List<NestedInteger> nestedList)
    {
        //便利list中NestedInteger对象
        for (int i = 0; i < nestedList.size(); i++) {
            //获取当前NestedInteger对象
            NestedInteger nestedInteger = nestedList.get(i);
            //如果不是单个值,即继续调用该方法
            if (!nestedInteger.isInteger())
            {
                List<NestedInteger> listN = nestedInteger.getList();
                huiGui(listN);
            }
            //单个值,就 添加到list中
            else
                list.add(nestedInteger.getInteger());
        }

    }

    //不难,看得懂
    @Override
    public Integer next() {
        Integer res = list.get(0);
        list.remove(0);
        return res;
    }
    //不难,看得懂
    @Override
    public boolean hasNext() {
         return list.size()>0;
    }
}

efecto

La
respuesta de información fue exitosa:
tiempo de ejecución: 10 ms, derrotando al 7.81% de los usuarios de Java
Consumo de memoria: 40.5 MB, derrotando al 90.66% de los usuarios de Java

Supongo que te gusta

Origin blog.csdn.net/tangshuai96/article/details/115110340
Recomendado
Clasificación