Skip to content

Instantly share code, notes, and snippets.

@cangoal
Created April 14, 2016 02:31
Show Gist options
  • Save cangoal/e2cde70b18e71430749be4bb59cc7166 to your computer and use it in GitHub Desktop.
Save cangoal/e2cde70b18e71430749be4bb59cc7166 to your computer and use it in GitHub Desktop.
LeetCode - Flatten 2D Vector
// 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].
public class Vector2D implements Iterator<Integer> {
List<Iterator> iterators = new ArrayList<Iterator>();
int index = 0;
public Vector2D(List<List<Integer>> vec2d) {
if(vec2d != null && vec2d.size() != 0){
for(List<Integer> lst : vec2d){
if(lst != null && lst.size() != 0) iterators.add(lst.iterator());
}
}
}
@Override
public Integer next() {
while(index < iterators.size()){
if(iterators.get(index).hasNext()) return (Integer)iterators.get(index).next();
index++;
}
return null;
}
@Override
public boolean hasNext() {
if(index == iterators.size()) return false;
else if(index < iterators.size() - 1) return true;
else return iterators.get(index).hasNext();
}
}
/**
* Your Vector2D object will be instantiated and called as such:
* Vector2D i = new Vector2D(vec2d);
* while (i.hasNext()) v[f()] = i.next();
*/
// https://leetcode.com/discuss/50292/7-9-lines-added-java-and-c-o-1-space
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment