251. Flatten 2D Vector
Разработайте итератор для разворачивания двумерного вектора. Он должен поддерживать операции next и hasNext.
Реализуйте класс Vector2D:
Vector2D(int[][] vec) инициализирует объект двумерным вектором vec.
next() returns следующий element из двумерного вектора и перемещает указатель на один шаг вперед. Вы можете предположить, что все вызовы next допустимы.
hasNext() returns true, если в векторе еще остались elementы, и false в противном случае.
Beispiel
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
C# Lösung
zugeordnet/originalusing System.Collections.Generic;
public class Vector2D {
private List<int> nums;
private int position;
public Vector2D(IList<IList<int>> v) {
nums = new List<int>();
foreach (var innerList in v) {
nums.AddRange(innerList);
}
position = -1;
}
public int Next() {
position++;
return nums[position];
}
public bool HasNext() {
return position + 1 < nums.Count;
}
}
C++ Lösung
Auto-Entwurf, vor dem Einreichen prüfen#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
public class Vector2D {
private List<int> nums;
private int position;
public Vector2D(IList<vector<int>> v) {
nums = new List<int>();
foreach (var innerList in v) {
nums.AddRange(innerList);
}
position = -1;
}
public int Next() {
position++;
return nums[position];
}
public bool HasNext() {
return position + 1 < nums.size();
}
}
Java Lösung
zugeordnet/originalimport java.util.ArrayList;
import java.util.List;
public class Vector2D {
private List<Integer> nums;
private int position;
public Vector2D(List<List<Integer>> v) {
nums = new ArrayList<>();
for (List<Integer> innerList : v) {
nums.addAll(innerList);
}
position = -1;
}
public int next() {
position++;
return nums.get(position);
}
public boolean hasNext() {
return position + 1 < nums.size();
}
}
JavaScript Lösung
zugeordnet/originalclass Vector2D {
constructor(v) {
this.nums = [].concat(...v);
this.position = -1;
}
next() {
this.position++;
return this.nums[this.position];
}
hasNext() {
return this.position + 1 < this.nums.length;
}
}
Python Lösung
zugeordnet/originalclass Vector2D:
def __init__(self, v):
self.nums = [num for inner_list in v for num in inner_list]
self.position = -1
def next(self):
self.position += 1
return self.nums[self.position]
def hasNext(self):
return self.position + 1 < len(self.nums)
Go Lösung
zugeordnet/originaltype Vector2D struct {
nums []int
position int
}
func Constructor(v [][]int) Vector2D {
nums := make([]int, 0)
for _, innerList := range v {
nums = append(nums, innerList...)
}
return Vector2D{nums, -1}
}
func (this *Vector2D) Next() int {
this.position++
return this.nums[this.position]
}
func (this *Vector2D) HasNext() bool {
return this.position + 1 < len(this.nums)
}
Algorithm
1️⃣
Инициализация: Установите указатель position так, чтобы он указывал на следующий element Arrayа, который должен быть возвращен методом next(). Это обеспечивает, что position всегда готов к получению следующего действительного elementа.
2️⃣
Проверка доступности: Реализуйте метод hasNext(), который просто проверяет, находится ли индекс position в пределах допустимых индексов Arrayа nums. Этот метод вернет true, если position указывает на действительный индекс, и false в противном случае.
3️⃣
Получение следующего elementа: Метод next() returns element в текущей позиции position и продвигает указатель position на следующий индекс. Эта операция обеспечивает, что после вызова next(), position обновляется и указывает на следующий element, готовый к следующему вызову next().
😎
Stellen zu dieser Aufgabe
aktive Stellen with overlapping task tags are angezeigt.