• 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.

  • 相关阅读:
    linux软件包安装yum
    linux软件包安装rpm
    使用OwnCloud建立属于自己私有的云存储网盘
    Linux 防火墙
    Linux docker
    llinux 权限2
    详列JDK中的设计模式(二)结构型
    详列JDK中的设计模式(一)创建型
    JavaWeb学习总结(一) JavaWeb基础与Tomcat服务器
    老生常谈-从输入url到页面展示到底发生了什么
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/6440849.html
Copyright © 2020-2023  润新知