[LeetCode][Python]Flatten Nested List Iterator

 Flatten Nested List Iterator

Given a nested list of integers, implement an iterator to flatten it.

Each element is either an integer, or a list -- whose elements may also be integers or other lists.

Example 1:
Given the list [[1,1],2,[1,1]],

By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,1,2,1,1].

 

Example 2:
Given the list [1,[4,[6]]],

By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,4,6].

https://leetcode.com/problems/flatten-nested-list-iterator/

 

 


 

 

展平嵌套的list。

从调用的方式来看,总会调用到最后,所以在构造函数中递归展开所有的数放到一位数组中。

另一种方式是把nested list压到栈中,需要的时候再从栈中拿。

注意需要调用注释中的isInteger(),getInteger()和getList()三个方法。

 

 1 # """
 2 # This is the interface that allows for creating nested lists.
 3 # You should not implement it, or speculate about its implementation
 4 # """
 5 #class NestedInteger(object):
 6 #    def isInteger(self):
 7 #        """
 8 #        @return True if this NestedInteger holds a single integer, rather than a nested list.
 9 #        :rtype bool
10 #        """
11 #
12 #    def getInteger(self):
13 #        """
14 #        @return the single integer that this NestedInteger holds, if it holds a single integer
15 #        Return None if this NestedInteger holds a nested list
16 #        :rtype int
17 #        """
18 #
19 #    def getList(self):
20 #        """
21 #        @return the nested list that this NestedInteger holds, if it holds a nested list
22 #        Return None if this NestedInteger holds a single integer
23 #        :rtype List[NestedInteger]
24 #        """
25 class NestedIterator(object):
26     
27     def __init__(self, nestedList):
28         """
29         Initialize your data structure here.
30         :type nestedList: List[NestedInteger]
31         """
32         self.__list = []
33         self.__index = 0
34         self.__getList(nestedList)
35         
36     def __getList(self, nestedList):
37         for item in nestedList:
38             if item.isInteger():
39                 self.__list.append(item.getInteger())
40             else:
41                 self.__getList(item.getList())
42 
43     def next(self):
44         """
45         :rtype: int
46         """
47         res = self.__list[self.__index]
48         self.__index += 1
49         return res
50 
51     def hasNext(self):
52         """
53         :rtype: bool
54         """
55         if(self.__index < len(self.__list)):
56             return True
57         return False

 

posted @ 2016-05-13 16:23  `Liok  阅读(1340)  评论(0编辑  收藏  举报