刷题

简介: ## 一、题目描述:给你一个嵌套的整数列表 nestedList 。每个元素要么是一个整数,要么是一个列表;该列表的元素也可能是整数或者是其他列表。请你实现一个迭代器将其扁平化,使之能够遍历这个列表中的所有整数。

一、题目描述:

给你一个嵌套的整数列表 nestedList 。每个元素要么是一个整数,要么是一个列表;该列表的元素也可能是整数或者是其他列表。请你实现一个迭代器将其扁平化,使之能够遍历这个列表中的所有整数。

实现扁平迭代器类 NestedIterator :

NestedIterator(List nestedList) 用嵌套列表 nestedList 初始化迭代器。
int next() 返回嵌套列表的下一个整数。
boolean hasNext() 如果仍然存在待迭代的整数,返回 true ;否则,返回 false 。
你的代码将会用下述伪代码检测:

initialize iterator with nestedList
res = []
while iterator.hasNext()

append iterator.next() to the end of res

return res
如果 res 与预期的扁平化列表匹配,那么你的代码将会被判为正确。

示例 1:

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

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

提示:

1 <= nestedList.length <= 500
嵌套列表中的整数值在范围 [-106, 106] 内

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/flatten-nested-list-iterator
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

首先在构造函数中便通过递归的方法直接将Nested类型的列表转换为Integer类型的列表(递归抽取NestedList中的所有Integer);
然后再通过简单的迭代器模式对Integer类型的列表进行迭代。

三、AC 代码:

public class NestedIterator implements Iterator<Integer> {
    private int index = 0;
    private List<Integer> valList;

    public NestedIterator(List<NestedInteger> nestedList) {
        valList = new ArrayList<>();    ////初始化一个Integer列表
        getVal(nestedList);             //对Nested列表进行递归。
    }

    @Override
    public Integer next() {
        index++;
        return valList.get(index - 1);
    }

    public void getVal(List<NestedInteger> nesteds){
        int listIndex = 0;
        while(listIndex < nesteds.size()){
            if(nesteds.get(listIndex).isInteger()){
                valList.add(nesteds.get(listIndex).getInteger());
            }else{
                getVal(nesteds.get(listIndex).getList());
            }
            listIndex++;
        }
    }

    @Override
    public boolean hasNext() {
        if(index < valList.size()){
            return true;
        }else{
            return false;
        }
    }
}

相关文章
|
SQL 数据采集 存储
基于clickhouse做用户画像,标签圈选
基于clickhouse做用户画像,标签圈选
1596 0
基于clickhouse做用户画像,标签圈选
|
JavaScript
VUE element-ui之table表格全选框(复选框)隐藏
VUE element-ui之table表格全选框(复选框)隐藏
2049 0
VUE element-ui之table表格全选框(复选框)隐藏
|
SQL 算法 前端开发
【MybatisPlus】MP解决四种表与实体的映射问题,以及id自增策略
MP解决四种表与实体的映射问题,以及id自增策略
3945 0
【MybatisPlus】MP解决四种表与实体的映射问题,以及id自增策略
|
存储 弹性计算 固态存储
阿里云服务器通用型实例规格及最新收费价格标准汇总
本文介绍了阿里云服务器是规格中通用型实例规格有哪些和最新的收费标准,可供新手用户了解和选择阿里云服务器通用型实例。
阿里云服务器通用型实例规格及最新收费价格标准汇总
|
存储 监控 数据可视化
为什么各大厂自研的内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊!(上)
为什么各大厂自研的内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊!
502 0
为什么各大厂自研的内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊!(上)
|
机器学习/深度学习
双向RNN与堆叠的双向RNN
双向RNN(Bidirectional RNN)的结构如下图所示。
659 0
双向RNN与堆叠的双向RNN
|
XML 编解码 API
让你的应用完美适配平板
其实标题有点吹牛逼了,谁也不敢说能完美适配平板,只能说尽力去做,包括显示和使用的各个方面尽力去做,才有可能在更多的平板设备上更加完美的运行起来,因为安卓的设备实在是太多了,之前手机在卷,现在平板也一样在卷。。。
545 0
让你的应用完美适配平板
|
小程序 前端开发 开发者
支付宝小程序模板开发,一整套流程
支付宝小程序服务商模板开发着力于解决支付宝生态体系内的小程序管理问题,一套模板,随处部署。能尽可能地减少系统服务商的开发成本,系统服务商只用开发一套小程序代码作为模板就可以快速批量的孵化出大量的商家小程序。
730 0
支付宝小程序模板开发,一整套流程
|
监控 安全 程序员
如何高效对接第三方支付
电商购物流程中核心的一环是用户支付。目前我们已经服务30个国家和地区,不同国家往往需要对接不同的第三方支付公司,所以最近两年,研发组对接了大量的第三方支付公司,积累了一定的经验。