251. Flatten 2D Vector

LeetCode medium original: C# #array #csharp #design #leetcode #medium
O texto da tarefa é traduzido do russo para o idioma selecionado. O código permanece sem alterações.

Разработайте итератор для разворачивания двумерного вектора. Он должен поддерживать операции next и hasNext.

Реализуйте класс Vector2D:

Vector2D(int[][] vec) инициализирует объект двумерным вектором vec.

next() returns следующий element из двумерного вектора и перемещает указатель на один шаг вперед. Вы можете предположить, что все вызовы next допустимы.

hasNext() returns true, если в векторе еще остались elementы, и false в противном случае.

Exemplo

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# solução

correspondente/original
using 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++ solução

rascunho automático, revisar antes de enviar
#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 solução

correspondente/original
import 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 solução

correspondente/original
class 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 solução

correspondente/original
class 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 solução

correspondente/original
type 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().

😎

Vacancies for this task

vagas ativas with overlapping task tags are mostradas.

Todas as vagas
Ainda não há vagas ativas.