LeetCode No341. Flatten Nested List Iterator
2016-05-14 13:14
411 查看
1. 题目描述
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].
2. 思路
在构造函数中,利用题目提供的API将嵌套列表递归展开到vector<int>对象中,注意使用下标,可以省去列表的复制开销。
迭代器中使用iter_记录迭代器当前位置。
3. 算法
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * class NestedInteger { * public: * // Return true if this NestedInteger holds a single integer, rather than a nested list. * bool isInteger() const; * * // Return the single integer that this NestedInteger holds, if it holds a single integer * // The result is undefined if this NestedInteger holds a nested list * int getInteger() const; * * // Return the nested list that this NestedInteger holds, if it holds a nested list * // The result is undefined if this NestedInteger holds a single integer * const vector<NestedInteger> &getList() const; * }; */ class NestedIterator { public: NestedIterator(vector<NestedInteger> &nestedList) { Flaten(nestedList, 0, ivec_); iter_ = ivec_.begin(); } int next() { return *iter_++; } bool hasNext() { if (iter_ != ivec_.end()) return true; else return false; } private: void Flaten(const vector<NestedInteger> &nested_list, int idx, vector<int> &out_vec) { if (idx == nested_list.size()) return; if (nested_list[idx].isInteger()) { out_vec.push_back(nested_list[idx].getInteger()); } else { Flaten(nested_list[idx].getList(), 0, out_vec); } Flaten(nested_list, idx + 1, out_vec); } vector<int> ivec_; vector<int>::iterator iter_; }; /** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i(nestedList); * while (i.hasNext()) cout << i.next(); */
4. 参考资料
相关文章推荐
- JavaScript常用内置对象及其相应属性和方法(二)
- #pragma pack(push,1)与#pragma pack(1)的区别
- vmware workstation pro 12 中安装Mac OS X
- Java PathFinder(一) Java PathFinder基于Eclipse的安装配置及使用
- Linux文件远程拷贝命令scp的使用
- mybatis 使用oracle char 字段查询返回结果总是null
- 第十二周项目1.1实现复数类中的运算符重载(成员函数)
- Vi 编辑器的三种模式
- 代码能力并不是你最重要的能力 !! ---IBM数据摇滚节获奖感悟
- Part2:Unity学习笔记十四 - Space Shooter(从视频最后一课向Done_Main.unity场景修改的过程)
- Mac 修改用户环境变量
- 四点起床
- amazon 笔试: 购物统计
- 新版本 Linux Deploy 部署 Debian 提示 E:the selected extractor cannot be found:ar 问题
- 转载: #pragma pack(push,1) & #pragma pack(pop)
- 递归之求幂
- 初识软件工程-软件工程的基本概念
- JVM内存模型
- JVM--第二章--Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- 四位密码程序,效果类似IOS(附源代码)