码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]341. Flatten Nested List Iterator 展开嵌套列表的迭代器

时间:2018-11-25 12:02:36      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:nes   empty   leetcode   lin   int   not   nbsp   sts   etl   

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:

Input: [[1,1],2,[1,1]]
Output: [1,1,2,1,1]
Explanation: By calling next repeatedly until hasNext returns false, 
             the order of elements returned by next should be: [1,1,2,1,1].

Example 2:

Input: [1,[4,[6]]]
Output: [1,4,6]
Explanation: By calling next repeatedly until hasNext returns false, 
             the order of elements returned by next should be: [1,4,6].

 

思路

 

代码

 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 
20   private Stack<NestedInteger> stack;
21 
22     public NestedIterator(List<NestedInteger> nestedList) {
23         stack = new Stack<>();
24         pushListElements(nestedList);
25     }
26 
27     @Override
28     public Integer next() {
29         return stack.pop().getInteger();
30     }
31 
32     @Override
33     public boolean hasNext() {
34         if (stack.isEmpty()) {
35             return false;
36         }
37         
38         while (!stack.peek().isInteger()) {
39             pushListElements(stack.pop().getList());
40             if (stack.isEmpty()) {
41                 return false;
42             }
43         }
44         return true;
45     }
46     
47     private void pushListElements(List<NestedInteger> list) {
48         for (int i = list.size() - 1; i >= 0; i--) {
49             stack.push(list.get(i));
50         }
51     }
52 }

 

[leetcode]341. Flatten Nested List Iterator 展开嵌套列表的迭代器

标签:nes   empty   leetcode   lin   int   not   nbsp   sts   etl   

原文地址:https://www.cnblogs.com/liuliu5151/p/10014700.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!