281. Zigzag Iterator


做题历程:

  1. 本题应该是第一次或者第二次做,本次耗时18分钟独立解出

本题难度倒是不高,基本就是Medium的难度。。说下大概的思路吧:

  1. 用一个二维数组存储v1v2
  2. 用两个变量:rowcolumn来保存当前的位置
  3. next()每次都调用hasNext()来获取当前的值,即所有的算法都放在hasNext()
  4. hasNext()中放一个bool check变量来得知hasNext()是否必要,还是可以直接返回true

总体代码如下所示:

class ZigzagIterator {
public:
    ZigzagIterator(vector<int>& v1, vector<int>& v2) {
        row = 1;
        sz = 2;
        v.resize(sz, vector<int>());
        v[0] = v1;
        v[1] = v2;
        column = -1;
        check = false;
    }

    int next() {
        hasNext();
        check = false;
        return v[row][column];
    }

    bool hasNext() {
        if (check == true) {
            return true;
        }
        check = true;
        int i = 0;
        while (i < sz) {
            row = (row + 1) % sz;
            if (row == 0) {
                column++;
            }
            if (column < v[row].size()) {
                return true;
            }
            ++i;
        }
        return false;
    }
private:
    vector<vector<int>> v;
    int row, column;
    bool check;
    int sz;
};

/**
 * Your ZigzagIterator object will be instantiated and called as such:
 * ZigzagIterator i(v1, v2);
 * while (i.hasNext()) cout << i.next();
 */

results matching ""

    No results matching ""