[Leetcode] 341. Flatten Nested List Iterator 解题报告
来源:互联网 发布:开票软件双击打不开 编辑:程序博客网 时间:2024/06/03 21:02
题目:
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]
.
思路:
我们用栈来解决这个问题:首先将NestedInteger数组里面的元素逆序加入栈中,然后检查栈顶元素,如果是list,则将其弹出,并将其内部元素逆序加入栈中,重复这一过程直到栈顶元素是Integer。在next()函数中,首先弹出栈顶元素并记录其Integer的值。但是此时还要检查栈顶元素是不是Integer,如果不是,还需要采用和上面相同的方法,摊平栈顶元素直到其顶部元素是Integer而不是list,最后再返回刚才记录的Integer的值。
代码:
/** * // 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) { for (auto it = nestedList.rbegin(); it != nestedList.rend(); ++it) { st.push(*it); } while (!st.empty() && !st.top().isInteger()) { NestedInteger ni = st.top(); st.pop(); vector<NestedInteger> &list = ni.getList(); for (auto it = list.rbegin(); it != list.rend(); ++it) { st.push(*it); } } } int next() { int ret = st.top().getInteger(); st.pop(); while (!st.empty() && !st.top().isInteger()) { NestedInteger ni = st.top(); st.pop(); vector<NestedInteger> &list = ni.getList(); for (auto it = list.rbegin(); it != list.rend(); ++it) { st.push(*it); } } return ret; } bool hasNext() { return !st.empty(); }private: stack<NestedInteger> st;};/** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i(nestedList); * while (i.hasNext()) cout << i.next(); */
- [leetcode] 341. Flatten Nested List Iterator 解题报告
- [Leetcode] 341. Flatten Nested List Iterator 解题报告
- leetcode 341. Flatten Nested List Iterator
- [leetcode] 341. Flatten Nested List Iterator
- LeetCode 341. Flatten Nested List Iterator
- LeetCode 341. Flatten Nested List Iterator
- [leetcode] 341. Flatten Nested List Iterator
- LeetCode: 341. Flatten Nested List Iterator
- Leetcode 341. Flatten Nested List Iterator
- 【LeetCode】 341. Flatten Nested List Iterator
- leetcode 341. Flatten Nested List Iterator
- LeetCode 341. Flatten Nested List Iterator
- [leetcode]341. Flatten Nested List Iterator
- leetcode 341. Flatten Nested List Iterator
- leetcode 341. Flatten Nested List Iterator
- leetcode 341. Flatten Nested List Iterator
- Leetcode 341. Flatten Nested List Iterator
- LeetCode|Flatten Nested List Iterator
- java-接口/内部类/代理
- leetcode--Word Search
- 集合类型
- NYOJ 891 找点【贪心算法】
- Common Subsequence
- [Leetcode] 341. Flatten Nested List Iterator 解题报告
- 课时17 网络基础
- HTML标签隐藏以及不可修改
- 利用geolocation获取用户位置信息,用百度地图展现
- Headmaster's Headache UVA
- 用树莓派改装电风扇及实现Android遥控
- UVA
- JavaScript调试,显示输出,北京有我科技读卡器调试,YW607ym
- JS学习-对象和循环