251. Flatten 2D Vector

LeetCode medium original: C# #array #csharp #design #leetcode #medium
선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

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

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

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

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

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

예제

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# 해법

매칭됨/원본
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++ 해법

자동 초안, 제출 전 검토
#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 해법

매칭됨/원본
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 해법

매칭됨/원본
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 해법

매칭됨/원본
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 해법

매칭됨/원본
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 배열а, который должен быть возвращен методом next(). Это обеспечивает, что position всегда готов к получению следующего действительного elementа.

2️⃣

Проверка доступности: Реализуйте метод hasNext(), который просто проверяет, находится ли индекс position в пределах допустимых индексов 배열а nums. Этот метод вернет true, если position указывает на действительный индекс, и false в противном случае.

3️⃣

Получение следующего elementа: Метод next() returns element в текущей позиции position и продвигает указатель position на следующий индекс. Эта операция обеспечивает, что после вызова next(), position обновляется и указывает на следующий element, готовый к следующему вызову next().

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.