[Leetcode] 281. Zigzag Iterator

 

这一题其实没有什么很取巧的东西。就是两个数组来回跳就完事了,与其说是复杂还不如说是要小心处理。
但是follow up 是要你兼容K个数组,其实也是差不多的,把K个数组放进一个ArrayList里面当成是一个2d数组就好了。然后就是保持两个cursors,一个是对行的,另一个是对列的。对行的cursor不停往下走,走到最下面那个array之后对列的cursor的往前走一步。在这个过程里,如果某个数组的长度小于关于列的cursor,就直接删掉。

主要算法的理论就是上面那样的。只是要注意的是hasNext或者next的一方是要做对数组cursors的维护的,1. 关于行的cursor是否超过行数的总数,是的话关于列的cursor前进一格,关于行的cursor回到0。2. 如果一个列的cursor超过了一个数组的长度,直接删掉,往下寻找。 给出代码如下:

public class ZigzagIterator {
    int rowCursor = 0;
    int colCursor = 0;
    ArrayList<List<Integer>> data;    

    public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
        data = new ArrayList<>();
        data.add(v1);
        data.add(v2);
    }

    public int next() {
        int result = data.get(colCursor).get(rowCursor);
        colCursor++;
        if (colCursor >= data.size()) {
            colCursor = 0;
            rowCursor++;
        }
        return result;
    }

    public boolean hasNext() {
        while(!data.isEmpty() && rowCursor >= data.get(colCursor).size()) {
            data.remove(colCursor);
            if (colCursor >= data.size()) {
                colCursor = 0;
                rowCursor++;
            }
        }
        
        return !data.isEmpty();
    }
}

猜你喜欢

转载自blog.csdn.net/chaochen1407/article/details/82357193
今日推荐