LeetCode Solutions
341. Flatten Nested List Iterator
Time: $O(n)$ Space: $O(n)$
class NestedIterator {
public:
NestedIterator(vector<NestedInteger>& nestedList) {
addInteger(nestedList);
}
int next() {
const int num = q.front();
q.pop();
return num;
}
bool hasNext() {
return !q.empty();
}
private:
queue<int> q;
void addInteger(const vector<NestedInteger>& nestedList) {
for (const NestedInteger& ni : nestedList)
if (ni.isInteger())
q.push(ni.getInteger());
else
addInteger(ni.getList());
}
};
public class NestedIterator implements Iterator<Integer> {
public NestedIterator(List<NestedInteger> nestedList) {
addInteger(nestedList);
}
@Override
public Integer next() {
return q.poll();
}
@Override
public boolean hasNext() {
return !q.isEmpty();
}
private Queue<Integer> q = new ArrayDeque<>();
private void addInteger(final List<NestedInteger> nestedList) {
for (final NestedInteger ni : nestedList)
if (ni.isInteger())
q.offer(ni.getInteger());
else
addInteger(ni.getList());
}
}
class NestedIterator:
def __init__(self, nestedList: List[NestedInteger]):
self.q = deque()
self.addInteger(nestedList)
def next(self) -> int:
return self.q.popleft()
def hasNext(self) -> bool:
return self.q
def addInteger(self, nestedList: List[NestedInteger]) -> None:
for ni in nestedList:
if ni.isInteger():
self.q.append(ni.getInteger())
else:
self.addInteger(ni.getList())