# """# This is the interface that allows for creating nested lists.# You should not implement it, or speculate about its implementation# """# class NestedInteger:# def isInteger(self) -> bool:# """# @return True if this NestedInteger holds a single integer, rather than a nested list.# """## def getInteger(self) -> int:# """# @return the single integer that this NestedInteger holds, if it holds a single integer# Return None if this NestedInteger holds a nested list# """## def getList(self) -> [NestedInteger]:# """# @return the nested list that this NestedInteger holds, if it holds a nested list# Return None if this NestedInteger holds a single integer# """classNestedIterator:def__init__(self,nestedList:[NestedInteger]):defdfs(nestedList):foreinnestedList:ife.isInteger():self.vals.append(e.getInteger())else:dfs(e.getList())self.vals=[]dfs(nestedList)self.cur=0defnext(self)->int:res=self.vals[self.cur]self.cur+=1returnresdefhasNext(self)->bool:returnself.cur<len(self.vals)# Your NestedIterator object will be instantiated and called as such:# i, v = NestedIterator(nestedList), []# while i.hasNext(): v.append(i.next())
/** * // 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 null if this NestedInteger holds a single integer * public List<NestedInteger> getList(); * } */publicclassNestedIteratorimplementsIterator<Integer>{privateList<Integer>vals;privateIterator<Integer>cur;publicNestedIterator(List<NestedInteger>nestedList){vals=newArrayList<>();dfs(nestedList);cur=vals.iterator();}@OverridepublicIntegernext(){returncur.next();}@OverridepublicbooleanhasNext(){returncur.hasNext();}privatevoiddfs(List<NestedInteger>nestedList){for(NestedIntegere:nestedList){if(e.isInteger()){vals.add(e.getInteger());}else{dfs(e.getList());}}}}/** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i = new NestedIterator(nestedList); * while (i.hasNext()) v[f()] = i.next(); */
/** * // 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; * }; */classNestedIterator{public:NestedIterator(vector<NestedInteger>&nestedList){dfs(nestedList);}intnext(){returnvals[cur++];}boolhasNext(){returncur<vals.size();}private:vector<int>vals;intcur=0;voiddfs(vector<NestedInteger>&nestedList){for(auto&e:nestedList){if(e.isInteger()){vals.push_back(e.getInteger());}else{dfs(e.getList());}}}};/** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i(nestedList); * while (i.hasNext()) cout << i.next(); */
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * type NestedInteger struct { * } * * // Return true if this NestedInteger holds a single integer, rather than a nested list. * func (this NestedInteger) IsInteger() bool {} * * // 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 * // So before calling this method, you should have a check * func (this NestedInteger) GetInteger() int {} * * // Set this NestedInteger to hold a single integer. * func (n *NestedInteger) SetInteger(value int) {} * * // Set this NestedInteger to hold a nested list and adds a nested integer to it. * func (this *NestedInteger) Add(elem NestedInteger) {} * * // Return the nested list that this NestedInteger holds, if it holds a nested list * // The list length is zero if this NestedInteger holds a single integer * // You can access NestedInteger's List element directly if you want to modify it * func (this NestedInteger) GetList() []*NestedInteger {} */typeNestedIteratorstruct{iterator[]intindex,lengthint}funcConstructor(nestedList[]*NestedInteger)*NestedIterator{result:=make([]int,0)vartraversalfunc(nodes[]*NestedInteger)traversal=func(nodes[]*NestedInteger){for_,child:=rangenodes{ifchild.IsInteger(){result=append(result,child.GetInteger())}else{traversal(child.GetList())}}}traversal(nestedList)return&NestedIterator{iterator:result,index:0,length:len(result)}}func(this*NestedIterator)Next()int{res:=this.iterator[this.index]this.index++returnres}func(this*NestedIterator)HasNext()bool{returnthis.index<this.length}
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * class NestedInteger { * If value is provided, then it holds a single integer * Otherwise it holds an empty nested list * constructor(value?: number) { * ... * }; * * Return true if this NestedInteger holds a single integer, rather than a nested list. * isInteger(): boolean { * ... * }; * * Return the single integer that this NestedInteger holds, if it holds a single integer * Return null if this NestedInteger holds a nested list * getInteger(): number | null { * ... * }; * * Set this NestedInteger to hold a single integer equal to value. * setInteger(value: number) { * ... * }; * * Set this NestedInteger to hold a nested list and adds a nested integer elem to it. * add(elem: NestedInteger) { * ... * }; * * Return the nested list that this NestedInteger holds, * or an empty list if this NestedInteger holds a single integer * getList(): NestedInteger[] { * ... * }; * }; */classNestedIterator{privatevals:number[];privateindex:number;constructor(nestedList:NestedInteger[]){this.index=0;this.vals=[];this.dfs(nestedList);}dfs(nestedList:NestedInteger[]){for(constvofnestedList){if(v.isInteger()){this.vals.push(v.getInteger());}else{this.dfs(v.getList());}}}hasNext():boolean{returnthis.index<this.vals.length;}next():number{returnthis.vals[this.index++];}}/** * Your ParkingSystem object will be instantiated and called as such: * var obj = new NestedIterator(nestedList) * var a: number[] = [] * while (obj.hasNext()) a.push(obj.next()); */
// #[derive(Debug, PartialEq, Eq)]// pub enum NestedInteger {// Int(i32),// List(Vec<NestedInteger>)// }structNestedIterator{index:usize,vals:Vec<i32>,}/** * `&self` means the method takes an immutable reference. * If you need a mutable reference, change it to `&mut self` instead. */implNestedIterator{fndfs(nestedList:&Vec<NestedInteger>,vals:&mutVec<i32>){foreleinnestedList.iter(){matchele{NestedInteger::Int(val)=>vals.push(*val),NestedInteger::List(list)=>Self::dfs(list,vals),}}}fnnew(nestedList:Vec<NestedInteger>)->Self{letmutvals=vec![];Self::dfs(&nestedList,&mutvals);Self{vals,index:0,}}fnnext(&mutself)->i32{letres=self.vals[self.index];self.index+=1;res}fnhas_next(&self)->bool{self.index<self.vals.len()}}/** * Your NestedIterator object will be instantiated and called as such: * let obj = NestedIterator::new(nestedList); * let ret_1: i32 = obj.next(); * let ret_2: bool = obj.has_next(); */
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * type NestedInteger struct { * } * * // Return true if this NestedInteger holds a single integer, rather than a nested list. * func (this NestedInteger) IsInteger() bool {} * * // 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 * // So before calling this method, you should have a check * func (this NestedInteger) GetInteger() int {} * * // Set this NestedInteger to hold a single integer. * func (n *NestedInteger) SetInteger(value int) {} * * // Set this NestedInteger to hold a nested list and adds a nested integer to it. * func (this *NestedInteger) Add(elem NestedInteger) {} * * // Return the nested list that this NestedInteger holds, if it holds a nested list * // The list length is zero if this NestedInteger holds a single integer * // You can access NestedInteger's List element directly if you want to modify it * func (this NestedInteger) GetList() []*NestedInteger {} */typeNestedIteratorstruct{nested*list.List}funcConstructor(nestedList[]*NestedInteger)*NestedIterator{nested:=list.New()for_,v:=rangenestedList{nested.PushBack(v)}return&NestedIterator{nested:nested}}func(this*NestedIterator)Next()int{res:=this.nested.Front().Value.(*NestedInteger)this.nested.Remove(this.nested.Front())returnres.GetInteger()}func(this*NestedIterator)HasNext()bool{forthis.nested.Len()>0&&!this.nested.Front().Value.(*NestedInteger).IsInteger(){front:=this.nested.Front().Value.(*NestedInteger)this.nested.Remove(this.nested.Front())nodes:=front.GetList()fori:=len(nodes)-1;i>=0;i--{this.nested.PushFront(nodes[i])}}returnthis.nested.Len()>0}