Leetcode 扁平化嵌套列表迭代器

本文介绍了如何设计一个迭代器,遍历嵌套整型列表中的所有整数。核心思路是利用栈的数据结构,将列表反转后压栈,并在迭代过程中处理栈顶元素。该方法的时间复杂度为初始化和next操作为O(1),hasNext操作为均摊O(1),空间复杂度为O(n)。提供的Python和PHP代码实现了这一解决方案。
摘要由CSDN通过智能技术生成
WechatIMG603.jpeg

题目描述

leetcode 第341题:扁平化嵌套列表迭代器
给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。
列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。
示例:
输入: [1,[4,[6]]]
输出: [1,4,6]
解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,4,6]。

解题方法

参照题解

  • 解题思路

创建栈stack来存储整型列表nestedList中的所有整数
因为返回整数的顺序是从左到右,所以需要将nestedList反转后压栈
hasNext中,当stack有值,且栈顶元素是列表弹出栈顶元素,反转后再依次压栈,直到栈顶元素为整数
每次调用hasNext时,就能保证栈顶元素是整数,直到栈为空
每次调用next时,弹出栈顶的整数即可

  • 复杂度

时间复杂度:初始化和next为O(1),hasNext为均摊O(1)
空间复杂度:O(n)

  • 代码实现

python3

class NestedIterator:
    def __init__(self, nestedList: [NestedInteger]):
        self.stack = nestedList[::-1]
    
    def next(self) -> int:
        return self.stack.pop().getInteger()
    
    def hasNext(self) -> bool:
        while self.stack and not self.stack[-1].isInteger():
            self.stack += self.stack.pop().getList()[::-1]
        return self.stack

php

class NestedIterator {
    function __construct($nestedList) {
        krsort($nestedList);
        $this->stack = $nestedList;
    }  
    
    function next() {
        return array_pop($this->stack)->getInteger();
    }
    
    function hasNext() {
        while($this->stack && !end($this->stack)->isInteger()){
            $list = array_pop($this->stack)->getList();
            krsort($list);
            $this->stack = array_merge($this->stack,$list);
        }
        return $this->stack;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值