/** * // 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) { s.assign(rbegin(nestedList), rend(nestedList)); }
intnext(){ int res = s.back().getInteger(); s.pop_back(); // 别忘了pop return res; }
boolhasNext(){ while (!s.empty() && !s.back().isInteger()) { auto lst = s.back().getList(); s.pop_back(); s.insert(end(s), rbegin(lst), rend(lst)); } return !s.empty(); }
vector<NestedInteger> s; };
/** * 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 * 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) { for (auto rit = nestedList.rbegin(); rit != nestedList.rend(); ++rit) { s.push(*rit); } }
intnext(){ auto res = s.top().getInteger(); s.pop(); return res; }
boolhasNext(){ while (!s.empty() && !s.top().isInteger()) { auto lst = s.top().getList(); s.pop(); for (auto rit = lst.rbegin(); rit != lst.rend(); ++rit) { s.push(*rit); } } return !s.empty(); }
stack<NestedInteger> s; };
/** * 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 * 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) { s.emplace(begin(nestedList), end(nestedList)); }
intnext(){ int res = s.top().first->getInteger(); s.top().first++; return res; }
boolhasNext(){ while (!s.empty()) { auto &[b, e] = s.top(); if (b == e) { s.pop(); } elseif (!b->isInteger()) { s.emplace(begin(b->getList()), end(b->getList())); ++b; } elsebreak; } return !s.empty(); }
using vnii = vector<NestedInteger>::iterator; stack<pair<vnii, vnii>> s; };
/** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i(nestedList); * while (i.hasNext()) cout << i.next(); */