281. Zigzag Iterator
做题历程:
- 本题应该是第一次或者第二次做,本次耗时18分钟,独立解出
本题难度倒是不高,基本就是Medium的难度。。说下大概的思路吧:
- 用一个二维数组存储
v1和v2 - 用两个变量:
row和column来保存当前的位置 next()每次都调用hasNext()来获取当前的值,即所有的算法都放在hasNext()中- 在
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();
*/