Implement an iterator to flatten a 2d vector.
For example,
Given 2d vector =
[
[1,2],
[3],
[4,5,6]
]
By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,2,3,4,5,6].
Follow up:
As an added challenge, try to code it using only iterators in C++ or iterators in Java.
对比了discuss 仍然觉得我写的好…
beats 84.91% 下面就是我的code
public class Vector2D implements Iterator<Integer> {
private Iterator<List<Integer>> all;
private Iterator<Integer> cur;
public Vector2D(List<List<Integer>> vec2d) {
all = vec2d.iterator();
}
@Override
public Integer next() {
return cur.next();
}
@Override
public boolean hasNext() {
if (cur != null && cur.hasNext()) return true;
//1.
while(all.hasNext()){
cur = all.next().iterator();
if(cur.hasNext()) return true;
}
return false;
}
}
1.为什么使用while 因为有可能有这种输入
[
[1,2],
[],
[4,5,6]
]