LC: 251. Flatten 2D Vector
https://leetcode.com/problems/flatten-2d-vector/
251. Flatten 2D Vector
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 tonextare valid.hasNext()returnstrueif there are still some elements in the vector, andfalseotherwise.
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 FalseConstraints:
0 <= vec.length <= 2000 <= vec[i].length <= 500-500 <= vec[i][j] <= 500At most
105calls will be made tonextandhasNext.
Follow up: As an added challenge, try to code it using only iterators in C++ or iterators in Java.
The Essence:
Für dieses Problem ist es ausreichend, zwei Zeiger zu verwenden, um die Zeile und Spalte des Vektors zu indizieren. Da es leere 1D-Vektoren gibt, muss der Zeilenindex entsprechend implementiert werden. Wenn die aktuelle Zeile nicht so viele Elemente hat wie die Spaltenindex, dann sollte die Zeile einfach an nächste gültige Zeilen verschoben werden.
Details:
Man kann die Methode hasNext() innerhalb der Methode next() abrufen, um die gleiche Funktionalität nur in einer Methode und nicht zweimal zu haben. Dies überträgt die Verantwortung, den nächsten gültigen Index zu finden, einer einzelnen Methode.
Solution(s):
Default Code:
Last updated