首页 > 代码库 > Leetcode: Flatten Nested List Iterator
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。