扁平化嵌套列表迭代器

题目链接

扁平化嵌套列表迭代器

题目描述

扁平化嵌套列表迭代器_第1张图片
扁平化嵌套列表迭代器_第2张图片

注意点

  • 每个元素要么是一个整数,要么是一个列表;该列表的元素也可能是整数或者是其他列表
  • 嵌套列表中的整数值在范围 [-1000000, 1000000] 内
  • NestedInteger中有三个方法,分别是:isInteger() ,判断当前存储的对象是否为 int;getInteger() , 如果当前存储的元素是 int 型的,那么返回当前的结果 int,否则调用会失败;getList() ,如果当前存储的元素是 List<‘NestedInteger’> 型的,那么返回该 List,否则调用会失败

解答思路

  • 由于列表的元素也可能是整数或者是其他列表,所以先使用递归将迭代器中的列表都伸展开来加入到list中,其中list中的元素都是整数
  • next和hasnext相当于遍历list的过程

代码

/**
 * // This is the interface that allows for creating nested lists.
 * // You should not implement it, or speculate about its implementation
 * public interface NestedInteger {
 *
 *     // @return true if this NestedInteger holds a single integer, rather than a nested list.
 *     public boolean isInteger();
 *
 *     // @return the single integer that this NestedInteger holds, if it holds a single integer
 *     // Return null if this NestedInteger holds a nested list
 *     public Integer getInteger();
 *
 *     // @return the nested list that this NestedInteger holds, if it holds a nested list
 *     // Return empty list if this NestedInteger holds a single integer
 *     public List getList();
 * }
 */
public class NestedIterator implements Iterator<Integer> {
    private List<Integer> list = new ArrayList<>();
    private int index;

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

    private void add(List<NestedInteger> nestedList) {
        for (NestedInteger nestedInteger : nestedList) {
            if (nestedInteger.isInteger()) {
                list.add(nestedInteger.getInteger());
            } else {
                add(nestedInteger.getList());
            }
        }
    }
    
    @Override
    public Integer next() {
        return list.get(index++);
    }

    @Override
    public boolean hasNext() {
        return index < list.size();
    }
}

/**
 * Your NestedIterator object will be instantiated and called as such:
 * NestedIterator i = new NestedIterator(nestedList);
 * while (i.hasNext()) v[f()] = i.next();
 */

关键点

  • 理解本题中NestedIterator和NestedInteger结构

你可能感兴趣的:(算法,算法,数据结构,leetcode,java)