点击上方蓝字设为星标
东哥带你手把手撕力扣?
点击下方卡片即可搜索?
这是 labuladong 第 103 篇原创
这篇文章本来想试下付费图文的功能,但是公众平台出 bug 了,大概率会出现无法创建订单的问题,我自己都看不了……那就算了吧,对于成功付费的读者,相当于你赞赏了本文,后台都有记录的,谢谢各位的支持~
今天来讲一道非常有启发性的设计题目,为什么说它有启发性,我们后面再说。
一、题目描述
这是 LeetCode 第 341 题「扁平化嵌套列表迭代器」,混合了算法和数据结构的设计,很有意思。我来描述一下题目:
首先,现在有一种数据结构NestedInteger
,这个结构中存的数据可能是一个Integer
整数,也可能是一个NestedInteger
列表。注意,这个列表里面装着的是NestedInteger
,也就是说这个列表中的每一个元素可能是个整数,可能又是个列表,这样无限递归嵌套下去……
NestedInteger
有如下 API:
public class NestedInteger {
// 如果其中存的是一个整数,则返回 true,否则返回 false
public boolean isInteger();
// 如果其中存的是一个整数,则返回这个整数,否则返回 null
public Integer getInteger();
// 如果其中存的是一个列表,则返回这个列表,否则返回 null
public List getList();
}
我们的算法会被输入一个NestedInteger
列表,我们需要做的就是写一个迭代器类,将这个带有嵌套结构NestedInteger
的列表「拍平」:
public class NestedIterator implements Iterator<Integer> {
// 构造器输入一个 NestedInteger 列表
public Nested