2017-09-22 1 views
0

Ich versuche meine Lösung zu einem Problem zu bekommen, um den Online-Richter auf Leetcode zu übergeben. Das Problem ist: Eine geschachtelte Liste von Ganzzahlen vorausgesetzt, implementieren Sie einen Iterator, um ihn zu reduzieren.Abflachung einer Liste mit Sublisten

Jedes Element ist entweder eine ganze Zahl oder eine Liste - deren Elemente auch ganze Zahlen oder andere Listen sein können.

Beispiel 1: die Liste gegeben [[1,1], 2, [1,1]],

Durch nächsten wiederholten Aufruf bis hasNext false zurückgibt, sollte die Reihenfolge der Elemente zurückgeführt, indem der nächste sein: [1,1,2,1,1]

Das vollständige Problem ist here.

Das Problem stellt fest, dass es die Klasse instanziiert wird, das den folgenden Code implementiert wird:

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

Im Folgenden meine Lösung ist:

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 

Wenn ich diesen Code ausführen in einer IDE mit der Eingabe [[1,1], 2, [1,1]], bekomme ich eine Ausgabe von [1,1,2,1,1]. Aus irgendeinem Grund, wenn ich den Code mit dem Online-Richter unter Berücksichtigung der Eingabe [[1,1], 2, [1,1]] ausführe, ist die Ausgabe [[1,1], 2, [1,1] ] ist zurück gekommen. Warum gibt der Leetcode-Online-Richter etwas anderes zurück?

Antwort

1

Sie meinten None nicht NULL richtig?

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

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

Durch die Ausführung:

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

print v 

Ich habe:

[1, 1, 2, 1, 1] 

Also, anders als auf Keine NULL ändern, ich weiß es nicht.

1

Ihre Lösung hat 2 Probleme.

  1. Ändern Sie in der nächsten Methode Return NULL auf None.
  2. In flattenList funktioniert der Größenvergleich für ele nur in Python 2! Fügen Sie die Funktion len() hinzu, damit Python 3 funktioniert.

Hier ist der geänderte Code. Dies sollte überall laufen.

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 
+0

Es funktioniert immer noch nicht, wenn ich auf [leetcode] (https://leetcode.com/problems/flatten-nested-list-iterator/description/) einreichen. Funktioniert es für dich? – loremIpsum1771

Verwandte Themen