首页 > 代码库 > 251. Flatten 2D Vector
251. 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]
.
Hint:
- How many variables do you need to keep track?
- Two variables is all you need. Try with
x
andy
. - Beware of empty rows. It could be the first few rows.
- To write correct code, think about the invariant to maintain. What is it?
- The invariant is
x
andy
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? - Not sure? Think about how you would implement
hasNext()
. Which is more complex? - Common logic in two different places should be refactored into a common method.
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(); */
251. Flatten 2D Vector
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。