leetcode_middle_50_341. Flatten Nested List Iterator

来源:互联网 发布:大革命1060设置优化 编辑:程序博客网 时间:2024/06/05 11:07
题意:

一种嵌套数组,里面的元素可能是整数可能是数组,如果是数组,这个数组里面的员孙可能有整数也可能有数组

要求实现其迭代器。

分析:

只要是栈应该都不会太难,能想出来。我们通过例子来分析:

比如:

[[3,4],[5,6]] , 2 , [1,1]三个元素

相当于第一层结点:

第二层:  [3,4] , [5, 6]    ,2 ,  1,1

第三层: 3,4,5,6,2,1,1

虽然我们现在对动态的搜索过程还不是很清晰,但是我们知道是要叶子节点(整数),只要是List就要展开,从左到右(类似于深搜)。因为第一个节点假如是一个list哪怕有很多层,第二个节点是一个整数,我们直到把第一个节点全部展开之前也不能遍历到第二个节点。但是我们如果全部先解开是麻烦且浪费的,所以我们考虑动态的解开

public class NestedIterator implements Iterator<Integer> {    Stack<NestedInteger> stack = null;    public NestedIterator(List<NestedInteger> nestedList) {        stack = new Stack<>();        for(int i=nestedList.size()-1; i>=0; i--){            stack.push(nestedList.get(i));        }    }    @Override    public Integer next() {        if(hasNext())             return stack.pop().getInteger();            else             return null;    }    @Override    public boolean hasNext() {        while(!stack.isEmpty()){            if(stack.peek().isInteger()){                return true;            }else{                NestedInteger tmp = stack.pop();                for(int i = tmp.getList().size()-1; i >= 0;i--)                {                    stack.push(tmp.getList().get(i));                }            }        }        return false;    }}


0 0
原创粉丝点击