• [LintCode] 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
    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].

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

    LeetCode上的原题,请参见我之前的博客Flatten Nested List Iterator。但是不太明白的是,那篇博客中的解法三可以通过LeetCode的OJ,在LintCode上跑就有错误,不知道啥原因。

    解法一:

    class NestedIterator {
    public:
        NestedIterator(vector<NestedInteger> &nestedList) {
            for (int i = nestedList.size() - 1; i >= 0; --i) {
                s.push(nestedList[i]);
            }
        }
    
        int next() {
            NestedInteger t = s.top(); s.pop();
            return t.getInteger();
        }
    
        bool hasNext() {
            while (!s.empty()) {
                NestedInteger t = s.top(); 
                if (t.isInteger()) return true;
                s.pop();
                for (int i = t.getList().size() - 1; i >= 0; --i) {
                    s.push(t.getList()[i]);
                }
            }
            return false;
        }
    
    private:
        stack<NestedInteger> s;
    };

    解法二:

    class NestedIterator {
    public:
        NestedIterator(vector<NestedInteger> &nestedList) {
            for (auto a : nestedList) {
                d.push_back(a);
            }
        }
    
        int next() {
            NestedInteger t = d.front(); d.pop_front();
            return t.getInteger();
        }
    
        bool hasNext() {
            while (!d.empty()) {
                NestedInteger t = d.front();
                if (t.isInteger()) return true;
                d.pop_front();
                for (int i = 0; i < t.getList().size(); ++i) {
                    d.insert(d.begin() + i, t.getList()[i]);
                }
            }
            return false;
        }
    
    private:
        deque<NestedInteger> d;
    };
  • 相关阅读:
    JNI 对象处理 (转)
    快速配置vs2012+opencv
    Jni中C++和Java的参数传递(转)
    版本控制之四:SVN客户端重新设置帐号和密码(转)
    版本控制之三:SVN合并及解决冲突(转)
    版本控制之二:SVN的初步使用(转)
    版本控制之一:SVN服务器搭建与安装(转)
    xml读取一行数据
    方法论:怎样练习一万小时
    一位软件工程师的6年总结(转)
  • 原文地址:https://www.cnblogs.com/grandyang/p/5434649.html
Copyright © 2020-2023  润新知