Flatten Nested List Iterator

题目地址:
https://leetcode.com/problems/flatten-nested-list-iterator/#/description

题目:
Given a nested list of integers, implement an iterator to flatten it.
Each element is either an integer, or a list -- whose elements may also be integers or other lists.
Example 1:
Given the list [[1,1],2,[1,1]],
By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,1,2,1,1].
Example 2:
Given the list [1,[4,[6]]],
By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,4,6].

解题思路:
这道题主要就是利用NestedInteger里面的api,isInteger,getInteger和getList来将输入转化为list<Integer> flatten。这样所有信息都存在flatten里面了。然后每当call hasNext的时候就看iter还有没有下一个。

代码:

public class NestedIterator implements Iterator<Integer> {

    private List<Integer> flatten;
    private Iterator<Integer> iterator;
    public NestedIterator(List<NestedInteger> nestedList) {
        flatten = new ArrayList<>();
        flat(nestedList);
        iterator = flatten.iterator();
    }

    public void flat(List<NestedInteger> nestedList){
        for(int i = 0; i <= nestedList.size() - 1; i++){
            NestedInteger curr = nestedList.get(i);
            if(curr.isInteger()){
                flatten.add(curr.getInteger());
            }
            else{
                flat(curr.getList());
            }
        }
    }

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

    @Override    public boolean hasNext() {
        return iterator.hasNext();
    }
}








Comments

Popular Posts