Skip to content

Latest commit

 

History

History
81 lines (73 loc) · 1.95 KB

251. Flatten 2D Vector.md

File metadata and controls

81 lines (73 loc) · 1.95 KB

Solution1 (Using Java's iterator)

public class Vector2D implements Iterator<Integer> {

    List<List<Integer>> vec2d;
    Iterator<List<Integer>> itr1;
    Iterator<Integer> itr2;
    
    public Vector2D(List<List<Integer>> vec2d) {
        this.vec2d = vec2d;
        itr1 = vec2d.iterator();
    }

    @Override
    public Integer next() {
        return itr2.next();
    }

    @Override
    public boolean hasNext() {
        while ((itr2 == null || !itr2.hasNext()) && itr1.hasNext()) {
            itr2 = itr1.next().iterator();
        }
        return itr2 != null && itr2.hasNext();
    }
}

note

  • The idea is to utilize Java's Iterator interface. Create two iterators as class member variables and initialize the iterator which is to traverse the list's row in the constructor. In hasNext() method, we will initialize iterator which traverses our vector's column of each row.

Solution2 (without java's iterator)

public class Vector2D implements Iterator<Integer> {
    int row;
    int col;
    List<List<Integer>> vec2d;
    public Vector2D(List<List<Integer>> vec2d) {
        row = 0;
        col = 0;
        this.vec2d = vec2d;
    }

    @Override
    public Integer next() {
        Integer res = vec2d.get(row).get(col);
        if (col == vec2d.get(row).size() - 1) {
            row++;
            col = 0;
        }
        else {
            col++;
        }
        return res;
    }

    @Override
    public boolean hasNext() {
        if (vec2d == null || vec2d.size() == 0 || row >= vec2d.size()) {
            return false;
        }
        if (vec2d.get(row).size() != 0) {
            return true;
        }
        else {
            while (row < vec2d.size() && vec2d.get(row).size() == 0) {
                row++;
            }
            if (row >= vec2d.size()) {
                return false;
            }
            else {
                col = 0;
                return true;
            }
        }
    }
}