Design and implement an iterator to flatten a 2d vector. It should support the following operations: next
and hasNext
.
Example:
Vector2D iterator = new Vector2D([[1,2],[3],[4]]); iterator.next(); // return 1 iterator.next(); // return 2 iterator.next(); // return 3 iterator.hasNext(); // return true iterator.hasNext(); // return true iterator.next(); // return 4 iterator.hasNext(); // return false
Notes:
- Please remember to RESET your class variables declared in Vector2D, as static/class variables are persisted across multiple test cases. Please see here for more details.
- You may assume that
next()
call will always be valid, that is, there will be at least a next element in the 2d vector whennext()
is called.
Follow up:
As an added challenge, try to code it using only iterators in C++ or iterators in Java.
[Design] [Array] [Two Pointers] [Iterator]
- Binary Search Tree Iterator (Medium)
- Zigzag Iterator (Medium)
- Peeking Iterator (Medium)
- Flatten Nested List Iterator (Medium)
Hint 1
How many variables do you need to keep track?Hint 2
Two variables is all you need. Try withx
and y
.
Hint 3
Beware of empty rows. It could be the first few rows.Hint 4
To write correct code, think about the invariant to maintain. What is it?Hint 5
The invariant isx
and y
must always point to a valid point in the 2d vector. Should you maintain your invariant ahead of time or right when you need it?
Hint 6
Not sure? Think about how you would implementhasNext()
. Which is more complex?