标签:
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]
.
Hint:
x
and y
.x
and y
must always point to a valid point in the 2d vector. Should you maintain your invariant ahead of time or right when you need it?hasNext()
. Which is more complex?
public class Vector2D { public IList<IList<int>> v {get;set;} private int verticalCount {get;set;} private int index {get;set;} public Vector2D(IList<IList<int>> vec2d) { v= vec2d; verticalCount = 0; index = 0; } public bool HasNext() { if(verticalCount >= v.Count()) return false; if(verticalCount == v.Count()-1 && index >= v[verticalCount].Count()) return false; if(index >= v[verticalCount].Count()) { verticalCount++; while(verticalCount < v.Count() && v[verticalCount].Count() == 0) { verticalCount++; } if(verticalCount == v.Count()) return false; else { index = 0; return true; } } return true; } public int Next() { return v[verticalCount][index++]; } } /** * Your Vector2D will be called like this: * Vector2D i = new Vector2D(vec2d); * while (i.HasNext()) v[f()] = i.Next(); */
标签:
原文地址:http://www.cnblogs.com/renyualbert/p/5875631.html