Leet Code 第六天-展开二维向量

class Vector2D {
    private int[] t;
    private ArrayList<ArrayList<Integer>> v;

    public Vector2D(int[][] vec) {
        v = new ArrayList<>();
        for (int[] ints : vec) {
            ArrayList<Integer> list = new ArrayList<>();
            for (int anInt : ints) {
                list.add(anInt);
            }
            v.add(list);
        }
        t = new int[]{0, 0};
    }

    public int next() {
        ArrayList<Integer> integers = v.get(t[0]);
        Integer integer = integers.get(t[1]);
        if (t[1] == integers.size() - 1) {
            t[1] = 0;
            t[0]++;
        } else {
            t[1]++;
        }
        // while ( t[0] < v.size() && v.get(t[0]).size() == 0){
        //     t[0]++;
        // }
        return integer.intValue();
    }

    public boolean hasNext() {
        while ( t[0] < v.size() && v.get(t[0]).size() == 0){
            t[0]++;
        }
        if (t[0] == v.size() && t[1] == 0) {
            return false;
        }
        return true;
    }
}

这个题目总体来说是需求类型题目,完成题目要求即可。采用一个二维ArrayList存储传入的数组,数组t表示当前的行和列(0为行,1为列)。构造函数进行初始化,next函数从当前的行与列取出下一个要读取的内容,并根据当前位置是否是当前行最后一列从而对两个坐标进行更新。

在hasNext函数中,当发现当前行是空且t[0]<总行数,就让行数++,这样就可以保证行数永远在当前行有数或者已经遍历完的情况下。如果已经遍历完就返回false,为遍历完,说明此时对应的行还有数,就可以返回true。

猜你喜欢

转载自blog.csdn.net/m0_60388871/article/details/128694512