251. Flatten 2D Vector

Sharko Shen
Data Science & LeetCode for Kindergarten
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 vector vec.
  • next() returns the next element from the 2D vector and moves the pointer one step forward. You may assume that all the calls to next are valid.
  • hasNext() returns true if there are still some elements in the vector, and false 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)

--

--

Sharko Shen
Data Science & LeetCode for Kindergarten

Thinking “Data Science for Beginners” too hard for you? Check out “Data Science for Kindergarten” !