LeetCode 第341题:扁平化嵌套列表迭代器

2021-05-03  本文已影响0人  放开那个BUG

1、前言

题目描述

2、思路

这道题看上去是一个迭代器的问题(其实也是一个迭代器的问题),但是看完给的 case 示例发现嵌套不止一层,而是有很多层,看上去就是一棵树的遍历一样。

所以本题最简单的思路:首先使用树的遍历,将所有的节点都遍历出来,一次性装在一个 list 里,后面 hastnext、next 函数直接就变成了针对于 list 的操作,简化了代码,采用 dfs、bfs 均可。

但是一次性加载可能会有内存的问题,进阶思路是采用惰性加载,采用 bfs 的思路,如果加载的某个数是 list,则一直循环加载直到它是一个 integer。我就不写这种解法了,也很简单。

3、代码

public class NestedIterator implements Iterator<Integer> {

    private List<Integer> res = new ArrayList<>();
    private int index = 0;

    public NestedIterator(List<NestedInteger> nestedList) {
        helper(nestedList);
    }

    private void helper(List<NestedInteger> nestedList){
        for(NestedInteger nestedInteger : nestedList){
            if(nestedInteger.isInteger()){
                res.add(nestedInteger.getInteger());
                continue;
            }
            helper(nestedInteger.getList());
        }
    }


    @Override
    public Integer next() {
        if(!this.hasNext()){
            return -1;
        }
        Integer integer = res.get(index++);
        return integer;
    }

    @Override
    public boolean hasNext() {
        if(res.size() != 0 && index < res.size()){
            return true;
        }
        return false;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读