lintcode练习-528. 摊平嵌套的列表

描述

给你一个嵌套的列表,实现一个迭代器将其摊平。
一个列表的每个元素可能是整数或者一个列表。

You don't need to implement the remove method.

您在真实的面试中是否遇到过这个题?  是

样例

给出列表 [[1,1],2,[1,1]],经过迭代器之后返回 [1,1,2,1,1]

给出列表 [1,[4,[6]]],经过迭代器之后返回 [1,4,6]

实现代码:

对输出元素进行判断,如果是list就展开

"""
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 {boolean} True if this NestedInteger holds a single integer,
        # rather than a nested list.

    def getInteger(self):
        # @return {int} the single integer that this NestedInteger holds,
        # if it holds a single integer
        # Return None if this NestedInteger holds a nested list

    def getList(self):
        # @return {NestedInteger[]} the nested list that this NestedInteger holds,
        # if it holds a nested list
        # Return None if this NestedInteger holds a single integer
"""


class NestedIterator(object):

    def __init__(self, nestedList):
        # Initialize your data structure here.
        self.stack = nestedList[::-1]

    # @return {int} the next element in the iteration
    def next(self):
        # Write your code here
        return self.stack.pop().getInteger()

    # @return {boolean} true if the iteration has more element or false
    def hasNext(self):
        # Write your code here
        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())

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/81367925