LeetCode 251. Flatten 2D Vector
原题链接在这里:https://leetcode.com/problems/flatten-2d-vector/
题目:
Implement an iterator to flatten a 2d vector.
Example:
Input: 2d vector =
[
[1,2],
[3],
[4,5,6]
]
Output:[1,2,3,4,5,6]
Explanation: 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.
题解:
用两个index 分别记录list 的 index 和当前 list的element index.
Time Complexity: Vector2D() O(1). hasNext() O(vec2d.size()). next() O(1). Space: O(1).
AC Java:
 public class Vector2D {
     List<List<Integer>> listOfList;
     int listIndex;
     int elemIndex;
     public Vector2D(List<List<Integer>> vec2d) {
         listOfList = vec2d;
         listIndex = 0;
         elemIndex = 0;
     }
     public int next() {
         return listOfList.get(listIndex).get(elemIndex++);
     }
     public boolean hasNext() {
         while(listIndex < listOfList.size()){
             if(elemIndex < listOfList.get(listIndex).size()){
                 return true;
             }else{
                 listIndex++;
                 elemIndex = 0;
             }
         }
         return false;
     }
 }
 /**
  * Your Vector2D object will be instantiated and called as such:
  * Vector2D i = new Vector2D(vec2d);
  * while (i.hasNext()) v[f()] = i.next();
  */
Follow up 要用Iterator class.
Time Complexity: Vector2D() O(1). hasNext() O(vec2d.size()). next() O(1). Space: O(1).
AC Java:
 public class Vector2D implements Iterator<Integer> {
     Iterator<List<Integer>> i;
     Iterator<Integer> j;
     public Vector2D(List<List<Integer>> vec2d) {
         i = vec2d.iterator();
     }
     @Override
     public Integer next() {
         return j.next();
     }
     @Override
     public boolean hasNext() {
         while((j==null || !j.hasNext()) && i.hasNext()){
             j = i.next().iterator();
         }
         return j!=null && j.hasNext();
     }
 }
 /**
  * Your Vector2D object will be instantiated and called as such:
  * Vector2D i = new Vector2D(vec2d);
  * while (i.hasNext()) v[f()] = i.next();
  */
类似Flatten Nested List Iterator.
LeetCode 251. Flatten 2D Vector的更多相关文章
- [LeetCode] 251. Flatten 2D Vector 压平二维向量
		
Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...
 - 251. Flatten 2D Vector
		
题目: Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6 ...
 - 251. Flatten 2D Vector 平铺二维矩阵
		
[抄题]: Implement an iterator to flatten a 2d vector. Example: Input: 2d vector = [ [1,2], [3], [4,5,6 ...
 - [LeetCode] Flatten 2D Vector 压平二维向量
		
Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...
 - LeetCode Flatten 2D Vector
		
原题链接在这里:https://leetcode.com/problems/flatten-2d-vector/ 题目: Implement an iterator to flatten a 2d v ...
 - Flatten 2D Vector -- LeetCode
		
Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [,], [], [,,] ] By cal ...
 - [Swift]LeetCode251.展平二维向量 $ Flatten 2D Vector
		
Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...
 - Flatten 2D Vector
		
Implement an iterator to flatten a 2d vector. For example, Given 2d vector = [ [1,2], [3], [4,5,6] ] ...
 - [Locked] Flatten 2D Vector
		
Problem Description: Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [ ...
 
随机推荐
- css系列(7)成品网页
			
本节介绍用css和html组合起来写的页面.(代码可以直接运行) (1)仿旧版腾讯微博注册页面:(文件夹地址:http://files.cnblogs.com/files/MenAng ...
 - css小技巧1
			
资料 1. 文本省略 单行省略: white-space:nowrap; overflow:hidden; text-overflow:ellipsis; 多行文本省略: 只兼容webkit内核,不属 ...
 - layer满屏/禁止最大化最小化 可以做选择框使用
			
1.layer弹窗最大化 var index=layer.open(); layer.full(index); 2.layer禁止最大化最小化 layer.open( [ type:2, title: ...
 - TIJ读书笔记03-初始化和构造器
			
TIJ读书笔记03-初始化和构造器 初始化和清理是涉及安全的两个问题,如果对象不能正确的初始化会引起很多错误,比如空指针异常等,如果不能恰当及时的清理,会占用过多资源. 构造器在创建一个类的实例的 ...
 - QGIS3.0.3+Qt5.9+VS2015_x64编译
			
QGIS3.0.3+Qt5.9+VS2015_x64编译 参考:https://blog.csdn.net/u010670734/article/details/80241615 https://ww ...
 - Go 语言基础知识
			
0. Go语言书单 1. 文本注释 // 单行注释 /* */ 多行注释 2. 变量赋值 = 变量赋值 := 声明变量并赋值 3. 变量定义 var name string var age int v ...
 - ASP.NET5 MVC6 利用Middleware 创建可访问HttpContext 的业务类工厂。(代替HttpContext.Current)
			
我们的目标是在后台业务处理类中,能够很容易的取得用户信息或者其它HTTP请求相关的信息. 所以,首先我们需要一个存储这些信息的类: public class RequestData { public ...
 - Spring的AOP面向切面编程
			
什么是AOP? 1.AOP概念介绍 所谓AOP,即Aspect orientied program,就是面向方面(切面)的编程. 功能: 让关注点代码与业务代码分离! 关注点: 重复代码就叫做关注点: ...
 - R语言学习笔记(1)
			
第一章:R语言介绍 一 R的使用 1 R是一种区分大小写的解释型语言.R语句由函数和赋值构成.R使用<-作为赋值符号.例如: x<-rnorm(5) 创建了一个名为x的向量对象,它包含5个 ...
 - HTTP Status 500:报错Unsupported major.minor version 51.0(unable to load class XXX)
			
这个是jdk版本和JRE不匹配导致的. 报错信息: 问题详解:(待填) 处理: 1.检查jdk和jre版本是否匹配 ——打开命令行界面(cmd),分别输入java -version 和javac -v ...