LeetCode题解284. 顶端迭代器

给定一个迭代器类的接口,接口包含两个方法: next() 和 hasNext()。设计并实现一个支持 peek() 操作的顶端迭代器 -- 其本质就是把原本应由 next() 方法返回的元素 peek() 出来。

示例:

假设迭代器被初始化为列表 [1,2,3]。

调用 next() 返回 1,得到列表中的第一个元素。

现在调用 peek() 返回 2,下一个元素。在此之后调用 next() 仍然返回 2。

最后一次调用 next() 返回 3,末尾元素。在此之后调用 hasNext() 应该返回 false。

进阶:你将如何拓展你的设计?使之变得通用化,从而适应所有的类型,而不只是整数型?

题解:# 通俗易懂(Python3)

## 思路

题目给定了我们一个迭代器,因此我们就无法使用索引来直接访问元素。这在现实的场景有很大的意义,因为有时候数据是无限的,比如前端做一个无限加载。 比如计算斐波那契数列等等

本质上,for 循环也都是基于迭代器来做的,甚至设计模式中也有迭代器模式。 让我们来实现一下peek吧。

普通的迭代器有两个基本方法`next`和`hasNext`。而本题就是要求我们使用这两个API来实现`peek`的效果。 我们知道`peek`的返回值其实就和`next`一样,**只是peek不回会将头元素给移除**。因此我们的就是使用next来模拟`peek`,并将`next`的返回值存起来,等待下次next的时候我们不再调用`next`,而是将上一步存的值返回即可。

实际上我们可以更简化一下。我们全局储存一个`_next`,表示的是下一个元素。这样`peek`的时候直接将其返回即可,`hashNext`也只需要判断`_next`是否存在即可。问题的关键就是next,next的时候我们:

- 判断`_next`是否存在,如果不存在则抛出异常
- 如果存在,我们将`_next`返回,并调用`next`方法生成下一个`_next`

## 代码

```python
class PeekingIterator:
def __init__(self, iterator):
self._next = iterator.next()
self._iterator = iterator

def peek(self):
return self._next

def next(self):
if self._next is None:
raise StopIteration()
to_return = self._next
self._next = None
if self._iterator.hasNext():
self._next = self._iterator.next()
return to_return

def hasNext(self):
return self._next is not None
```

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解深度优先遍历和回溯的关系?

深度优先遍历的范围更大还是回溯的范围更大?为什么?题解:我的理解是:dfs是回溯思想的一种体现- 回溯:是在整个搜索空间中搜索出可行解,在搜索过程中不断剪枝回退,这是回溯的思想,这个搜索空间并没有限制于特定的数据结构。- dfs:dfs是指特定的数据结构中如图,树(特殊的图)中搜索答案,范围限制在了特定的数据结构。个人拙见。

LeetCode题解盲人买袜子。

他们都各自买了两对黑袜和两对白袜,八对袜子的布质、大小完全相同,而每对袜子都有一张商标纸连着。两位盲人不小心将八对袜子混在一起。他们每人怎样才能取回黑袜和白袜各两对呢?题解:暴力破解, 把袜子都拆开 一人一只 哈哈

LeetCode题解10个小球,随机分到12个盒子里,求恰好10个盒子都为空的概率。

10个小球,随机分到12个盒子里,求恰好10个盒子都为空的概率。要求用程序模拟十万次,暴力求出该概率来自:字节跳动 算法工程师一面的第一题 (3月30日,60分钟,牛客网视频面)https://www.nowcoder.com/discuss/395924

LeetCode题解烧绳子

烧一根不均匀的绳要用一个小时,如果要准确判断一个小时十五分钟,至少需要几根绳子?注意:- 每一根绳子虽然都可以烧一个小时,但均匀程度都不一样题解:三根1. 第一根点燃一头的同时,第二根两头同时点燃。2. 点燃两头的绳子燃尽时,同时点燃第一根绳子的另一头 并开始计时3. 等第一根绳子燃尽 再点燃第三根绳子的一头4. 燃尽 一小时十五分钟