251. Flatten 2D Vector
Published in
1 min readMay 31, 2023
Design an iterator to flatten a 2D vector. It should support the next
and hasNext
operations.
Implement the Vector2D
class:
Vector2D(int[][] vec)
initializes the object with the 2D vectorvec
.next()
returns the next element from the 2D vector and moves the pointer one step forward. You may assume that all the calls tonext
are valid.hasNext()
returnstrue
if there are still some elements in the vector, andfalse
otherwise.
Example 1:
Input
["Vector2D", "next", "next", "next", "hasNext", "hasNext", "next", "hasNext"]
[[[[1, 2], [3], [4]]], [], [], [], [], [], [], []]
Output
[null, 1, 2, 3, true, true, 4, false]
Explanation
Vector2D vector2D = new Vector2D([[1, 2], [3], [4]]);
vector2D.next(); // return 1
vector2D.next(); // return 2
vector2D.next(); // return 3
vector2D.hasNext(); // return True
vector2D.hasNext(); // return True
vector2D.next(); // return 4
vector2D.hasNext(); // return False
思路Coding化:
i
vec = [[1,2], [3], [4] ]
j
update pointer: 當j到了當前list的最後一位則update
next: return 當前的值,記得每次next,j都要加一
hasNext: 先update pointer(看j是否為最後一位),接著return i是否超過vec長度
class Vector2D:
def __init__(self, vec: List[List[int]]):
self.vector = vec
self.i = 0
self.j = 0
def update_pointers(self):
while self.i < len(self.vector) and self.j == len(self.vector[self.i]):
self.i += 1
self.j = 0
def next(self) -> int:
if self.hasNext():
result = self.vector[self.i][self.j]
self.j += 1
return result
else:
return "Exception Error"
def hasNext(self) -> bool:
self.update_pointers()
return self.i < len(self.vector)
Time Complexity: O(N)
Space Complexity: O(1)