251. 展开二维向量
请设计并实现一个能够展开二维向量的迭代器。该迭代器需要支持
next
和 hasNext
两种操作。示例:
Vector2D iterator = new Vector2D([[1,2],[3],[4]]); iterator.next(); // 返回 1 iterator.next(); // 返回 2 iterator.next(); // 返回 3 iterator.hasNext(); // 返回 true iterator.hasNext(); // 返回 true iterator.next(); // 返回 4 iterator.hasNext(); // 返回 false
法 1 栈模拟
思路
同 341. 扁平化嵌套列表迭代器 ,先将vec 倒叙入栈,然后保证每次操作的时栈顶字符均为数字
题解
class Vector2D: def __init__(self, vec: List[List[int]]): self.stack = vec[::-1] def next(self) -> int: if self.hasNext(): return self.stack.pop() def hasNext(self) -> bool: while len(self.stack): # 如果栈顶是list,那么弹出来再展开然后入栈 if isinstance(self.stack[-1], list): top = self.stack.pop() for item in top[::-1]: self.stack.append(item) # 栈顶是数值,可直接返回, elif isinstance(self.stack[-1], int): return True return False # Your Vector2D object will be instantiated and called as such: # obj = Vector2D(vec) # param_1 = obj.next() # param_2 = obj.hasNext()