栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode341. Flatten Nested List Iterator( 扁平化嵌套列表迭代器)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode341. Flatten Nested List Iterator( 扁平化嵌套列表迭代器)

You are given a nested list of integers nestedList. Each element is either an integer or a list whose elements may also be integers or other lists. Implement an iterator to flatten it.

Implement the NestedIterator class:

NestedIterator(List nestedList) Initializes the iterator with the nested list nestedList.
int next() Returns the next integer in the nested list.
boolean hasNext() Returns true if there are still some integers in the nested list and false otherwise.
Your code will be tested with the following pseudocode:

initialize iterator with nestedList
res = []
while iterator.hasNext()
append iterator.next() to the end of res
return res
If res matches the expected flattened list, then your code will be judged as correct.

Example 1:

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

有一个NestedInteger类型的List,这个NestedInteger元素可以是Integer,也可以是List,
相当于NestedInteger嵌套NestedInteger,List嵌套List。
要实现HasNext() 和 next(),
题目测试的时候在hasNext()时会不停的调用next(),得到nestedList中的所有元素。

思路:
在构造函数时把nestedList中的元素都保存到一个list中,
在next()时返回下一元素即可。

ArrayList在添加元素扩容时开销比较大,所以选择LinkedList。

添加元素时由于List中还有List,所以用递归。

另外,List中的元素类型NestedInteger是自定义类型,要用到代码中提示的方法,
比如说取出List中的Integer不是简单的list.get(i),而是list.get(i).getInteger()。

public class NestedIterator implements Iterator {
    LinkedList list = new LinkedList<>();

    public NestedIterator(List nestedList) {
        addElement(nestedList);
    }

    @Override
    public Integer next() {
        return list.pollFirst();
    }

    @Override
    public boolean hasNext() {
        return list.size() > 0;
    }
    
    void addElement(List nestedList) {
        for(int i = 0; i < nestedList.size(); i ++) {
            if(nestedList.get(i).isInteger()) {
                list.add(nestedList.get(i).getInteger());             
            } else {
                addElement(nestedList.get(i).getList());
            }
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867648.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号