Сведение списка, содержащего подсписки

Я пытаюсь найти решение проблемы, чтобы пройти через онлайн-судью по Leetcode. Проблема заключается в следующем: учитывая вложенный список целых чисел, реализовать итератор для его выравнивания.

Каждый элемент является либо целым числом, либо списком, элементы которого также могут быть целыми числами или другими списками.

Пример 1: приведен список [[1,1],2,[1,1]],

При повторном вызове next до тех пор, пока hasNext не вернет false, порядок элементов, возвращаемых next, должен быть следующим: [1,1,2,1,1]

Полная проблема здесь.

Проблема утверждает, что он будет создавать экземпляр класса, который реализован с использованием следующего кода:

# Your NestedIterator object will be instantiated and called as such:
# i, v = NestedIterator(nestedList), []
# while i.hasNext(): v.append(i.next())

Ниже мое решение:

class NestedIterator(object):
    currIdx = 0

    def __init__(self, nestedList):
        """
        Initialize your data structure here.
        :type nestedList: List[NestedInteger]
        """
        newFlattenedList = []
        self.flattenList(nestedList, newFlattenedList)
        nestedList = newFlattenedList
        self.flattenedList = nestedList

    def flattenList(self, nestedList, flattenedList):

        for ele in nestedList:
            if type(ele) == list and ele  > 0:
                self.flattenList(ele, flattenedList)
            else:
                flattenedList.append(ele)
        return

    def next(self):
        """
        :rtype: int
        """
        if self.hasNext():

            test = self.flattenedList[self.currIdx]
            self.currIdx +=1
            return test
        else:
            return NULL 

    def hasNext(self):
        """
        :rtype: bool
        """
        nextIdx = self.currIdx + 1 
        return True if nextIdx <= len(self.flattenedList) else False

Когда я запускаю этот код в IDE со входом [[1,1],2,[1,1]], я получаю вывод [1,1,2,1,1]. По какой-то причине, когда я запускаю код с онлайн-судьей, учитывая ввод [[1,1],2,[1,1]], вывод будет [[1,1], 2, [1,1] ] возвращается. Почему онлайн-судья leetcode возвращает что-то другое?

2 ответа

Вы имели в виду None не NULL право?

def next(self):
    """
    :rtype: int
    """
    if self.hasNext():

        test = self.flattenedList[self.currIdx]
        self.currIdx +=1
        return test
    else:
        #return NULL 
        return None

Запустив:

nestedList = [[1,1],2,[1,1]]
i, v = NestedIterator(nestedList), []
while i.hasNext(): v.append(i.next())

print v

Я получил:

[1, 1, 2, 1, 1]

Итак, кроме изменения NULL на None, я не знаю.

Ваше решение имеет 2 проблемы.

  1. Измените return NULL на None в следующем методе.
  2. В flattenList сравнение размеров элементов работает только в Python 2! Добавьте функцию len(), чтобы она работала на Python 3.

Вот модифицированный код. Это должно работать везде.

class NestedIterator(object):
    currIdx = 0

    def __init__(self, nestedList):
        """
        Initialize your data structure here.
        :type nestedList: List[NestedInteger]
        """
        newFlattenedList = []
        self.flattenList(nestedList, newFlattenedList)
        nestedList = newFlattenedList
        self.flattenedList = nestedList

    def flattenList(self, nestedList, flattenedList):

        for ele in nestedList:
            if type(ele) == list and len(ele)  > 0:
                self.flattenList(ele, flattenedList)
            else:
                flattenedList.append(ele)
        return

    def next(self):
        """
        :rtype: int
        """
        if self.hasNext():

            test = self.flattenedList[self.currIdx]
            self.currIdx +=1
            return test
        else:
            return None

    def hasNext(self):
        """
        :rtype: bool
        """
        nextIdx = self.currIdx + 1
        return True if nextIdx <= len(self.flattenedList) else False
Другие вопросы по тегам