zoukankan      html  css  js  c++  java
  • LeetCode 341. Flatten Nested List Iterator

    原题链接在这里:https://leetcode.com/problems/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<NestedInteger> stk 从后向前存储nestedList的每个item. hasNext() 拿出stk顶部item, 若不是Integer就把该item从后向前放回stk中.

    Note: [[]], in case of this, need to make sure the first is an integer.

    Time Complexity: next, O(1). hasNext, O(n).

    Space: O(n).

    AC Java:

     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     Stack<NestedInteger> stk;
    21     public NestedIterator(List<NestedInteger> nestedList) {
    22         stk = new Stack<NestedInteger>();
    23         for(int i = nestedList.size()-1; i>=0; i--){
    24             stk.push(nestedList.get(i));
    25         }
    26     }
    27 
    28     @Override
    29     public Integer next() {
    30         return stk.pop().getInteger();
    31     }
    32 
    33     @Override
    34     public boolean hasNext() {
    35         while(!stk.isEmpty()){
    36             NestedInteger cur = stk.peek();
    37             if(cur.isInteger()){
    38                 return true;
    39             }
    40             
    41             stk.pop();
    42             for(int i = cur.getList().size()-1; i>=0; i--){
    43                 stk.push(cur.getList().get(i));
    44             }
    45         }
    46         return false;
    47     }
    48 }
    49 
    50 /**
    51  * Your NestedIterator object will be instantiated and called as such:
    52  * NestedIterator i = new NestedIterator(nestedList);
    53  * while (i.hasNext()) v[f()] = i.next();
    54  */

    类似Nested List Weight SumZigzag IteratorMini ParserFlatten 2D Vector.

  • 相关阅读:
    Newtonsoft.Json序列化 对时间格式化处理
    CSS常用提示浮出层的写法
    避免常见的6种HTML5错误用法
    varchar(Max) 对应SqlParameter 数据类型长度改为1
    IIS指定域名不能调试解决办法
    如何弹出固定大小及内容的网页窗口
    CSS图片圆角框的灵活处理
    精通CSS:高级Web标准解决方案(中文电子书下载)
    AjaxControlToolKit(整理)三.......(35个控件)简单介绍
    CSS通用开发库
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/6440849.html
Copyright © 2011-2022 走看看