NestedIterator-扁平化嵌套列表迭代器

题意

给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。

列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。

示例 1:

输入: [[1,1],2,[1,1]]
输出: [1,1,2,1,1]
解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。

示例 2:

输入: [1,[4,[6]]]
输出: [1,4,6]
解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,4,6]。

补充条件

/**
 * // 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 null if this NestedInteger holds a single integer
 *     public List<NestedInteger> getList();
 * }
 */

上面这段话简单翻译来说就额是创建一个接口
IsInteger()这个方法,就是对象NestedInteger 只有一个数的时候返回true
是一个list的时候就是false
getInteger()对象NestedInteger 只有一个数,取出这个数,如不是返回null
getList()对象NestedInteger 是List,直接返回一个List包装NestedInteger 对象,如果是一个数返回null

解题思路

这道题目并没有多高深的算法,本人也是顺着一条线捋下来的,详细请看代码
##代码演示

public class NestedIterator implements Iterator<Integer> {
    //用来存放结果
    List<Integer> list=new ArrayList<>();
    //初始化,将List封装NestedInteger对象
    public NestedIterator(List<NestedInteger> nestedList) {
        huiGui(nestedList);
    }
    //回归算法,目的就是将NestedInteger这个list中所有值都取出来放入list中
    public void  huiGui(List<NestedInteger> nestedList)
    {
        //便利list中NestedInteger对象
        for (int i = 0; i < nestedList.size(); i++) {
            //获取当前NestedInteger对象
            NestedInteger nestedInteger = nestedList.get(i);
            //如果不是单个值,即继续调用该方法
            if (!nestedInteger.isInteger())
            {
                List<NestedInteger> listN = nestedInteger.getList();
                huiGui(listN);
            }
            //单个值,就 添加到list中
            else
                list.add(nestedInteger.getInteger());
        }

    }

    //不难,看得懂
    @Override
    public Integer next() {
        Integer res = list.get(0);
        list.remove(0);
        return res;
    }
    //不难,看得懂
    @Override
    public boolean hasNext() {
         return list.size()>0;
    }
}

效果

info
解答成功:
执行耗时:10 ms,击败了7.81% 的Java用户
内存消耗:40.5 MB,击败了90.66% 的Java用户

猜你喜欢

转载自blog.csdn.net/tangshuai96/article/details/115110340