[LeetCode] 341. 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]
.
将1个含有整数元素的嵌套链表压平,就是把所以元素按嵌套关系变成1个list。按题目要求要有next和hasNext两个函数。
Java:
- public class NestedIterator implements Iterator<Integer> {
- Stack<NestedInteger> stack;
- public NestedIterator(List<NestedInteger> nestedList) {
- stack = new Stack<>();
- pushData(nestedList);
- }
- @Override
- public Integer next() {
- return stack.pop().getInteger();
- }
- @Override
- public boolean hasNext() {
- while(!stack.isEmpty()) {
- if (stack.peek().isInteger()) {
- return true;
- }
- pushData(stack.pop().getList());
- }
- return false;
- }
- private void pushData(List<NestedInteger> nestedList) {
- for (int i = nestedList.size() - 1; i >= 0; i--) {
- stack.push(nestedList.get(i));
- }
- }
- }
- /**
- * Your NestedIterator object will be instantiated and called as such:
- * NestedIterator i = new NestedIterator(nestedList);
- * while (i.hasNext()) v[f()] = i.next();
- */
Python: stack
- # """
- # This is the interface that allows for creating nested lists.
- # You should not implement it, or speculate about its implementation
- # """
- #class NestedInteger(object):
- # def isInteger(self):
- # """
- # @return True if this NestedInteger holds a single integer, rather than a nested list.
- # :rtype bool
- # """
- #
- # def getInteger(self):
- # """
- # @return the single integer that this NestedInteger holds, if it holds a single integer
- # Return None if this NestedInteger holds a nested list
- # :rtype int
- # """
- #
- # def getList(self):
- # """
- # @return the nested list that this NestedInteger holds, if it holds a nested list
- # Return None if this NestedInteger holds a single integer
- # :rtype List[NestedInteger]
- # """
- class NestedIterator(object):
- def __init__(self, nestedList):
- """
- Initialize your data structure here.
- :type nestedList: List[NestedInteger]
- """
- self.stack = []
- self.list = nestedList
- def next(self):
- """
- :rtype: int
- """
- return self.stack.pop()
- def hasNext(self):
- """
- :rtype: bool
- """
- while self.list or self.stack:
- if not self.stack:
- self.stack.append(self.list.pop(0))
- while self.stack and not self.stack[-1].isInteger():
- top = self.stack.pop().getList()
- for e in top[::-1]:
- self.stack.append(e)
- if self.stack and self.stack[-1].isInteger():
- return True
- return False
- # Your NestedIterator object will be instantiated and called as such:
- # i, v = NestedIterator(nestedList), []
- # while i.hasNext(): v.append(i.next())
Python: queue
- class NestedIterator(object):
- def __init__(self, nestedList):
- """
- Initialize your data structure here.
- :type nestedList: List[NestedInteger]
- """
- self.queue = collections.deque()
- def getAll(nests):
- for nest in nests:
- if nest.isInteger():
- self.queue.append(nest.getInteger())
- else:
- getAll(nest.getList())
- getAll(nestedList)
- def next(self):
- """
- :rtype: int
- """
- return self.queue.popleft()
- def hasNext(self):
- """
- :rtype: bool
- """
- return len(self.queue)
- # Your NestedIterator object will be instantiated and called as such:
- # i, v = NestedIterator(nestedList), []
- # while i.hasNext(): v.append(i.next())
C++: stack
- 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;
- };
C++:deque
- 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;
- };
C++: Recursion
- class NestedIterator {
- public:
- NestedIterator(vector<NestedInteger> &nestedList) {
- make_queue(nestedList);
- }
- int next() {
- int t = q.front(); q.pop();
- return t;
- }
- bool hasNext() {
- return !q.empty();
- }
- private:
- queue<int> q;
- void make_queue(vector<NestedInteger> &nestedList) {
- for (auto a : nestedList) {
- if (a.isInteger()) q.push(a.getInteger());
- else make_queue(a.getList());
- }
- }
- };
All LeetCode Questions List 题目汇总
[LeetCode] 341. Flatten Nested List Iterator 压平嵌套链表迭代器的更多相关文章
- [LeetCode] Flatten Nested List Iterator 压平嵌套链表迭代器
Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...
- [LintCode] Flatten Nested List Iterator 压平嵌套链表迭代器
Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...
- [leetcode]341. Flatten Nested List Iterator展开嵌套列表的迭代器
Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...
- LeetCode 341. Flatten Nested List Iterator
https://leetcode.com/problems/flatten-nested-list-iterator/
- 【LeetCode】341. Flatten Nested List Iterator 解题报告(Python&C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归+队列 栈 日期 题目地址:https://lee ...
- [Swift]LeetCode341. 压平嵌套链表迭代器 | Flatten Nested List Iterator
Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...
- 【leetcode】341. Flatten Nested List Iterator
题目如下: Given a nested list of integers, implement an iterator to flatten it. Each element is either a ...
- 341. Flatten Nested List Iterator展开多层数组
[抄题]: Given a nested list of integers, implement an iterator to flatten it. Each element is either a ...
- 341. Flatten Nested List Iterator
List里可以有int或者List,然后里面的List里面可以再有List. 用Stack来做比较直观 Iterator无非是next()或者hasNext()这2个方程 一开始我想的是hasNext ...
随机推荐
- Tulip Festival(线段树+二分+CDQ+带修改莫队+树套树)
题目链接 传送门 线段树\(+\)二分思路 思路 比赛看到这题时感觉是一棵线段树\(+\)主席树,然后因为不会带修改主席树就放弃了,最后发现还卡了树套树. 由于本题数据保证序列中相同的数字不会超过20 ...
- ajax、axios、fetch 对比
前言 今天在看到一个比较好的插件,写一个示例时,由于需要请求在线数据,官方给的是用 $.get(),就为了一个示例使用 JQuery 没必要. 又找了找,发现有用 fecth 的,挺方便,这里就做一个 ...
- 项目Beta冲刺 - 凡事预则立
课程: 软件工程1916|W(福州大学) 作业要求: 项目Beta冲刺 团队名称: 火鸡堂 作业目标: 尽力交付 火鸡堂 队员学号 队员姓名 博客地址 备注 221600111 彼术向 http:// ...
- 查看mysql执行时间
mysql的 profiling不是默认打开的 查看profiling是否找开 mysql> show variables like "%pro%"; +---------- ...
- SUID提权
查看tmp目录权限 ll -d /tmp 切换到tmp目录 cd /tmp 创建一个exploit目录 mkdir exploit 查看ping命令带suid权限 ll /bin/ping 创建tar ...
- MySQL server has gone away && Lost connection to MySQL server during query
问题一.MySQL server has gone away ##### peewee from peewee import * from peewee import __exception_wrap ...
- VisualStudio 2019 Serials
9DP6T-9AGWG-KWV33-9MPC8-JDCVF 7G2HE-JR8KL-ABB9D-Y7789-GLNFL U2PWU-H7D9H-69T3B-JEYC2-3R2NG R8R8P-MTT6 ...
- vue+elementUI完成注册及登陆
1. vue怎么引入和配置使用element-ui框架 1.1 使用vue-cli脚手架工具创建一个vue项目 vue init webpack pro01 1.2 npm安装elementUI cd ...
- JavaScript高级程序编程(三)
2017-06-24 更新 北京连续三天下雨啦 乘性操作符 1.ECMA中定义了三种操作符,乘法 除法 和求模 并与其他语言相应操作符相同,再计算之前如果不是数值,会先去调用number()方法转 ...
- Angular2发送HTTP请求SpringBoot后台跨域问题解决
Angular通过http发送post请求至SpringBoot的Controller,由于同源策略的保护,遇到跨域问题: • 源(origin)就是协议(http).域名(localhost)和端口 ...