# """# 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(ls):forxinls:ifx.isInteger():self.nums.append(x.getInteger())else:dfs(x.getList())self.nums=[]self.i=-1dfs(nestedList)defnext(self)->int:self.i+=1returnself.nums[self.i]defhasNext(self)->bool:returnself.i+1<len(self.nums)# 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 empty list if this NestedInteger holds a single integer * public List<NestedInteger> getList(); * } */publicclassNestedIteratorimplementsIterator<Integer>{privateList<Integer>nums=newArrayList<>();privateinti=-1;publicNestedIterator(List<NestedInteger>nestedList){dfs(nestedList);}@OverridepublicIntegernext(){returnnums.get(++i);}@OverridepublicbooleanhasNext(){returni+1<nums.size();}privatevoiddfs(List<NestedInteger>ls){for(varx:ls){if(x.isInteger()){nums.add(x.getInteger());}else{dfs(x.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){autodfs=[&](auto&&dfs,vector<NestedInteger>&ls)->void{for(auto&x:ls){if(x.isInteger()){nums.push_back(x.getInteger());}else{dfs(dfs,x.getList());}}};dfs(dfs,nestedList);}intnext(){returnnums[++i];}boolhasNext(){returni+1<nums.size();}private:vector<int>nums;inti=-1;};/** * 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{nums[]intiint}funcConstructor(nestedList[]*NestedInteger)*NestedIterator{vardfsfunc([]*NestedInteger)nums:=[]int{}i:=-1dfs=func(ls[]*NestedInteger){for_,x:=rangels{ifx.IsInteger(){nums=append(nums,x.GetInteger())}else{dfs(x.GetList())}}}dfs(nestedList)return&NestedIterator{nums,i}}func(this*NestedIterator)Next()int{this.i++returnthis.nums[this.i]}func(this*NestedIterator)HasNext()bool{returnthis.i+1<len(this.nums)}
/** * // 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{privatenums:number[]=[];privatei=-1;constructor(nestedList:NestedInteger[]){constdfs=(ls:NestedInteger[])=>{for(constxofls){if(x.isInteger()){this.nums.push(x.getInteger());}else{dfs(x.getList());}}};dfs(nestedList);}hasNext():boolean{returnthis.i+1<this.nums.length;}next():number{returnthis.nums[++this.i];}}/** * 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{nums:Vec<i32>,i:usize,}/** * `&self` means the method takes an immutable reference. * If you need a mutable reference, change it to `&mut self` instead. */implNestedIterator{fnnew(nested_list:Vec<NestedInteger>)->Self{letmutnums=Vec::new();Self::dfs(&nested_list,&mutnums);NestedIterator{nums,i:0}}fnnext(&mutself)->i32{letresult=self.nums[self.i];self.i+=1;result}fnhas_next(&self)->bool{self.i<self.nums.len()}fndfs(nested_list:&Vec<NestedInteger>,nums:&mutVec<i32>){forniinnested_list{matchni{NestedInteger::Int(x)=>nums.push(*x),NestedInteger::List(list)=>Self::dfs(list,nums),}}}}