摊平嵌套的列表
题目
给你一个嵌套的列表,实现一个迭代器将其摊平。
一个列表的每个元素可能是整数或者一个列表。样例
给出列表 [[1,1],2,[1,1]],经过迭代器之后返回 [1,1,2,1,1]。
给出列表 [1,[4,[6]]],经过迭代器之后返回 [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();
* }
*/
import java.util.Iterator;
public class NestedIterator implements Iterator<Integer> {
private int mCount = 0;
private int mIndex = 0;
private ArrayList<Integer> mList = new ArrayList<>();
public NestedIterator(List<NestedInteger> nestedList) {
if (nestedList != null)
{
getList(nestedList,mList);
}
mCount = mList.size();
}
private void getList(List<NestedInteger> list,ArrayList<Integer> mList)
{
for (int i=0;i<list.size();i++)
{
NestedInteger ni = list.get(i);
if (ni.isInteger())
{
mList.add(ni.getInteger());
}
else
{
getList(ni.getList(),mList);
}
}
}
// @return {int} the next element in the iteration
@Override
public Integer next() {
return hasNext()?mList.get(mIndex++):null;
}
// @return {boolean} true if the iteration has more element or false
@Override
public boolean hasNext() {
return mIndex < mCount;
}
@Override
public void remove() {}
}
/**
* Your NestedIterator object will be instantiated and called as such:
* NestedIterator i = new NestedIterator(nestedList);
* while (i.hasNext()) v.add(i.next());
*/
Last Update 2016.11.19