2018-10-16 leetcode Flatten Nested List Iterator Flatten Nested List IteratorGenerators Version 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061# """# This is the interface that allows for creating nested lists.# You should not implement it, or speculate about its implementation# """#class NestedInteger(object):# def isInteger(self):# """# @return True if this NestedInteger holds a single integer, rather than a nested list.# :rtype bool# """## def getInteger(self):# """# @return the single integer that this NestedInteger holds, if it holds a single integer# Return None if this NestedInteger holds a nested list# :rtype int# """## def getList(self):# """# @return the nested list that this NestedInteger holds, if it holds a nested list# Return None if this NestedInteger holds a single integer# :rtype List[NestedInteger]# """class NestedIterator(object): def __init__(self, nestedList): """ Initialize your data structure here. :type nestedList: List[NestedInteger] """ self.ret = [] def flat(List): for x in List: if x.isInteger(): yield x.getInteger() else: for y in flat(x.getList()): yield y self.ret = flat(nestedList) def next(self): """ :rtype: int """ return self.value def hasNext(self): """ :rtype: bool """ try: self.value = next(self.ret) return True except StopIteration: return False# Your NestedIterator object will be instantiated and called as such:# i, v = NestedIterator(nestedList), []# while i.hasNext(): v.append(i.next()) Stack Version 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354# """# This is the interface that allows for creating nested lists.# You should not implement it, or speculate about its implementation# """#class NestedInteger(object):# def isInteger(self):# """# @return True if this NestedInteger holds a single integer, rather than a nested list.# :rtype bool# """## def getInteger(self):# """# @return the single integer that this NestedInteger holds, if it holds a single integer# Return None if this NestedInteger holds a nested list# :rtype int# """## def getList(self):# """# @return the nested list that this NestedInteger holds, if it holds a nested list# Return None if this NestedInteger holds a single integer# :rtype List[NestedInteger]# """class NestedIterator(object): def __init__(self, nestedList): """ Initialize your data structure here. :type nestedList: List[NestedInteger] """ self.stack = nestedList[::-1] def next(self): """ :rtype: int """ return self.stack.pop().getInteger() def hasNext(self): """ :rtype: bool """ while self.stack: top = self.stack[-1] if top.isInteger(): return True self.stack = self.stack[:-1] + top.getList()[::-1] return False# Your NestedIterator object will be instantiated and called as such:# i, v = NestedIterator(nestedList), []# while i.hasNext(): v.append(i.next()) leet code Newer Unique Paths Older Intersection of Two Arrays II