当前位置:网站首页>341. Flatten nested list iterator
341. Flatten nested list iterator
2022-07-06 12:43:00 【Zhang Wenhao】
341. Flatten nested list iterators
Flatten Nested List Iterator
List of articles
Title Description :
Give you a nested list of integers nestedList . Each element is either an integer , Or a list ; The elements of the list may also be integers or other lists . Please implement an iterator to flatten it , So that it can traverse all integers in this list .
Implement the flat iterator class NestedIterator :
NestedIterator(List<NestedInteger> nestedList)Using nested lists nestedList
Initialize iterator .int next()Returns the next integer of the nested list .boolean hasNext()If there are still integers to be iterated , return true ; otherwise , return false .
https://leetcode-cn.com/problems/flatten-nested-list-iterator/
You are given a nested list of integers nestedList. Each element is either an integer or a list whose elements may also be integers or other lists. Implement an iterator to flatten it.
Implement the NestedIterator class:
- NestedIterator(List nestedList) Initializes the
iterator with the nested listnestedList. - int next() Returns the next integer in the nested list.
- boolean hasNext() Returns true if there are still some integers in
the nested list and false otherwise.
Example :

Method
The mathematical formula
We can traverse the entire nested list first , Store all integers in an array , Then traverse the array to achieve next \texttt{next} next and hasNext \texttt{hasNext} hasNext Method .
Java
Depth-First Search (DFS)
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * public interface NestedInteger { * * // @return true if this NestedInteger holds a single integer, rather than a nested list. * public boolean isInteger(); * * // @return the single integer that this NestedInteger holds, if it holds a single integer * // Return null if this NestedInteger holds a nested list * public Integer getInteger(); * * // @return the nested list that this NestedInteger holds, if it holds a nested list * // Return empty list if this NestedInteger holds a single integer * public List<NestedInteger> getList(); * } */
public class NestedIterator implements Iterator<Integer> {
private List<Integer>list;
private int index=0;
private void dfs(List<NestedInteger> nestedList){
if(nestedList.size()==0){
return;
}
for(NestedInteger nestedInteger:nestedList){
if(nestedInteger.isInteger()){
list.add(nestedInteger.getInteger());
}else{
List<NestedInteger>nestedList1=nestedInteger.getList();
dfs(nestedList1);
}
}
}
public NestedIterator(List<NestedInteger> nestedList) {
list=new ArrayList<>();
dfs(nestedList);
}
@Override
public Integer next() {
return list.get(index++);
}
@Override
public boolean hasNext() {
return index<list.size();
}
}
/** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i = new NestedIterator(nestedList); * while (i.hasNext()) v[f()] = i.next(); */
Queue
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * public interface NestedInteger { * * // @return true if this NestedInteger holds a single integer, rather than a nested list. * public boolean isInteger(); * * // @return the single integer that this NestedInteger holds, if it holds a single integer * // Return null if this NestedInteger holds a nested list * public Integer getInteger(); * * // @return the nested list that this NestedInteger holds, if it holds a nested list * // Return empty list if this NestedInteger holds a single integer * public List<NestedInteger> getList(); * } */
public class NestedIterator implements Iterator<Integer> {
private Queue<Integer>q;
private void dfs(List<NestedInteger> nestedList){
if(nestedList.size()==0){
return;
}
for(NestedInteger nestedInteger:nestedList){
if(nestedInteger.isInteger()){
q.offer(nestedInteger.getInteger());
}else{
List<NestedInteger>nestedList1=nestedInteger.getList();
dfs(nestedList1);
}
}
}
public NestedIterator(List<NestedInteger> nestedList) {
q=new LinkedList<>();
dfs(nestedList);
}
@Override
public Integer next() {
return q.poll();
}
@Override
public boolean hasNext() {
return q.size()!=0;
}
}
/** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i = new NestedIterator(nestedList); * while (i.hasNext()) v[f()] = i.next(); */
Stack
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * public interface NestedInteger { * * // @return true if this NestedInteger holds a single integer, rather than a nested list. * public boolean isInteger(); * * // @return the single integer that this NestedInteger holds, if it holds a single integer * // Return null if this NestedInteger holds a nested list * public Integer getInteger(); * * // @return the nested list that this NestedInteger holds, if it holds a nested list * // Return empty list if this NestedInteger holds a single integer * public List<NestedInteger> getList(); * } */
public class NestedIterator implements Iterator<Integer> {
private Stack<NestedInteger>st;
public NestedIterator(List<NestedInteger> nestedList) {
st=new Stack<>();
for(int i=nestedList.size()-1;i>=0;i--){
st.push(nestedList.get(i));
}
}
@Override
public Integer next() {
return st.pop().getInteger();
}
@Override
public boolean hasNext() {
while(!st.isEmpty()){
NestedInteger cur=st.peek();
if(cur.isInteger()){
return true;
}
st.pop();
List<NestedInteger> list=cur.getList();
for(int i=list.size()-1;i>=0;i--){
st.push(list.get(i));
}
}
return false;
}
}
/** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i = new NestedIterator(nestedList); * while (i.hasNext()) v[f()] = i.next(); */
C++
Depth-First Search (DFS)
/** * // 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 {
private:
vector<int>list;
int index=0;
void dfs(vector<NestedInteger> nestedList){
if(nestedList.size()==0){
return;
}
for(NestedInteger nestedInteger:nestedList){
if(nestedInteger.isInteger()){
list.push_back(nestedInteger.getInteger());
}else{
vector<NestedInteger>nestedList1=nestedInteger.getList();
dfs(nestedList1);
}
}
}
public:
NestedIterator(vector<NestedInteger> &nestedList) {
dfs(nestedList);
}
int next() {
return list[index++];
}
bool hasNext() {
return index<list.size();
}
};
/** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i(nestedList); * while (i.hasNext()) cout << i.next(); */
Queue
/** * // 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 {
private:
queue<int>q;
int index=0;
void dfs(vector<NestedInteger> nestedList){
if(nestedList.size()==0){
return;
}
for(NestedInteger nestedInteger:nestedList){
if(nestedInteger.isInteger()){
q.push(nestedInteger.getInteger());
}else{
vector<NestedInteger>nestedList1=nestedInteger.getList();
dfs(nestedList1);
}
}
}
public:
NestedIterator(vector<NestedInteger> &nestedList) {
dfs(nestedList);
}
int next() {
int front=q.front();
q.pop();
return front;
}
bool hasNext() {
return !q.empty();
}
};
/** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i(nestedList); * while (i.hasNext()) cout << i.next(); */
Stack
class NestedIterator {
public:
NestedIterator(vector<NestedInteger> &nestedList) {
for (int i = nestedList.size() - 1; i >= 0; --i) {
st.push(nestedList[i]);
}
}
int next() {
NestedInteger cur = st.top(); st.pop();
return cur.getInteger();
}
bool hasNext() {
while (!st.empty()) {
NestedInteger cur = st.top();
if (cur.isInteger()) {
return true;
}
st.pop();
for (int i = cur.getList().size() - 1; i >= 0; --i) {
st.push(cur.getList()[i]);
}
}
return false;
}
private:
stack<NestedInteger> st;
};
author :fuxuemingzhu
link :https://leetcode-cn.com/problems/flatten-nested-list-iterator/solution/fu-xue-ming-zhu-xiang-jie-ti-yi-shu-li-d-n4qa/
source : Power button (LeetCode)
The copyright belongs to the author . Commercial reprint please contact the author for authorization , Non-commercial reprint please indicate the source .
Through screenshots


边栏推荐
- JS 函数提升和var变量的声明提升
- Problèmes avec MySQL time, fuseau horaire, remplissage automatique 0
- Basic operations of databases and tables ----- view data tables
- HCIP Day 12
- [Offer29] 排序的循环链表
- Flink late data processing (3)
- Fairygui joystick
- Redis based distributed ID generator
- Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作)
- Introduction to the daily practice column of the Blue Bridge Cup
猜你喜欢

Unity3d makes the registration login interface and realizes the scene jump

Learning notes of JS variable scope and function

FairyGUI复选框与进度条的组合使用

There is no red exclamation mark after SVN update

(1) Introduction Guide to R language - the first step of data analysis

Teach you to release a DeNO module hand in hand

Basic operations of databases and tables ----- creating data tables

Guided package method in idea

Redis based distributed ID generator

(3) Introduction to bioinformatics of R language - function, data Frame, simple DNA reading and analysis
随机推荐
Whistle+switchyomega configure web proxy
Minio file download problem - inputstream:closed
idea中好用的快捷键
Redis based distributed ID generator
Intermediate use tutorial of postman [environment variables, test scripts, assertions, interface documents, etc.]
[leetcode622]设计循环队列
Mysqldump error1066 error solution
In 2020, the average salary of IT industry exceeded 170000, ranking first
Unity3D制作注册登录界面,并实现场景跳转
基于Redis的分布式锁 以及 超详细的改进思路
[offer78]合并多个有序链表
Servlet
Expected value (EV)
Force buckle 1189 Maximum number of "balloons"
[offer78] merge multiple ordered linked lists
Design and implementation of general interface open platform - (39) simple and crude implementation of API services
C programming exercise
Meanings and differences of PV, UV, IP, VV, CV
MySQL takes up too much memory solution
[leetcode19]删除链表中倒数第n个结点