《LeetCode笔记91》:扁平化嵌套列表迭代器

题目:

给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。

列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。

示例 1:

输入: [[1,1],2,[1,1]]
输出: [1,1,2,1,1]
解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。

示例 2:

输入: [1,[4,[6]]]
输出: [1,4,6]
解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,4,6]。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flatten-nested-list-iterator

方法一:

DFS

设置一个直接包含数值的实体列表self.node。

在hashnext()中,将通过循环和中间节点列表node,将当前拥有实体值的NestedInteger对象加入到self.node中。

如果当前对象包含数值,则将当前对象加入self.node,如果当前对象包含列表,则将该列表拼接到node列表的表首。

# """
# This is the interface that allows for creating nested lists.
# You should not implement it, or speculate about its implementation
# """
#class NestedInteger:
#    def isInteger(self) -> bool:
#        """
#        @return True if this NestedInteger holds a single integer, rather than a nested list.
#        """
#
#    def getInteger(self) -> int:
#        """
#        @return 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) -> [NestedInteger]:
#        """
#        @return the nested list that this NestedInteger holds, if it holds a nested list
#        Return None if this NestedInteger holds a single integer
#        """

class NestedIterator:
    def __init__(self, nestedList: [NestedInteger]):
        self.nestedList = nestedList
        # print(self.nestedList)
        self.l = len(self.nestedList)
        self.current = 0
        self.node = []
    
    def next(self) -> int:
        return self.node.pop(0)
       
    
    def hasNext(self) -> bool:
        while(not self.node):
            if self.current<self.l:
                node = []
                node.append(self.nestedList[self.current])
                self.current+=1
                while(node):
                    head = node.pop(0)
                    if head.isInteger():
                        # print(head.getInteger())
                        self.node.append(head)
                    if head.getList():
                        node = head.getList()+node               
            else:
                return False
        return True

         

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值