题意
给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。
列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。
示例 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用户