Leetcode: Flatten Nested List Iterator
Posted neverlandly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode: Flatten Nested List Iterator相关的知识,希望对你有一定的参考价值。
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].
非常精巧地使用stack。push all the nestedList into the stack from back to front,so when we pop the stack, it returns the very first element
执行hasNext()的时候,如果peek()是integer, return true;否则是一个List<NestedInteger>, 则flatten这个list,同样的,把list里的NestedInteger倒序push入栈
1 /** 2 * // This is the interface that allows for creating nested lists. 3 * // You should not implement it, or speculate about its implementation 4 * public interface NestedInteger { 5 * 6 * // @return true if this NestedInteger holds a single integer, rather than a nested list. 7 * public boolean isInteger(); 8 * 9 * // @return the single integer that this NestedInteger holds, if it holds a single integer 10 * // Return null if this NestedInteger holds a nested list 11 * public Integer getInteger(); 12 * 13 * // @return the nested list that this NestedInteger holds, if it holds a nested list 14 * // Return null if this NestedInteger holds a single integer 15 * public List<NestedInteger> getList(); 16 * } 17 */ 18 public class NestedIterator implements Iterator<Integer> { 19 Stack<NestedInteger> st; 20 21 public NestedIterator(List<NestedInteger> nestedList) { 22 st = new Stack<NestedInteger>(); 23 for (int i=nestedList.size()-1; i>=0; i--) { 24 st.push(nestedList.get(i)); 25 } 26 } 27 28 @Override 29 public Integer next() { 30 return st.pop().getInteger(); 31 } 32 33 @Override 34 public boolean hasNext() { 35 while (!st.isEmpty()) { 36 if (st.peek().isInteger()) return true; 37 List<NestedInteger> cur = st.pop().getList(); 38 for (int i=cur.size()-1; i>=0; i--) { 39 st.push(cur.get(i)); 40 } 41 } 42 return false; 43 } 44 } 45 46 /** 47 * Your NestedIterator object will be instantiated and called as such: 48 * NestedIterator i = new NestedIterator(nestedList); 49 * while (i.hasNext()) v[f()] = i.next(); 50 */
以上是关于Leetcode: Flatten Nested List Iterator的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 341. Flatten Nested List Iterator
[leetcode] 341. Flatten Nested List Iterator
leetcode341. Flatten Nested List Iterator
[LeetCode] Flatten Nested List Iterator 压平嵌套链表迭代器