「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战」
描述
Design the CombinationIterator class:
- CombinationIterator(string characters, int combinationLength) Initializes the object with a string characters of sorted distinct lowercase English letters and a number combinationLength as arguments.
- next() Returns the next combination of length combinationLength in lexicographical order.
- hasNext() Returns true if and only if there exists a next combination.
Example 1:
1 | scss复制代码Input |
Note:
1 | vbnet复制代码1 <= combinationLength <= characters.length <= 15 |
解析
根据题意,设计一个 CombinationIterator 类,里面需要包涵几个函数:
- CombinationIterator(string characters, int combineLength) 使用已经经过排序的不同小写英文字母的字符串 characters 和数字 combinationLength 作为参数初始化对象
- next() 按字典顺序返回长度为 combinationLength 的下一个组合
- hasNext() 当且仅当存在下一个组合时才返回 true
这道题的关键在于找出所有的组合,至于 next 和 hasNext 两个函数只需要做简单的逻辑判断即可,第一种方法使用了内置函数 itertools.combinations 来找出所有长度为 combinationLength 的组合,简单粗暴。
解答
1 | python复制代码class CombinationIterator(object): |
运行结果
1 | rust复制代码Runtime: 44 ms, faster than 81.82% of Python online submissions for Iterator for Combination. |
解析
当然了使用内置函数显得没有水平,我们还可以自己写代码,自定义函数 permute 使用 DFS 找出所有的组合。
解答
1 | python复制代码class CombinationIterator(object): |
运行结果
1 | rust复制代码Runtime: 52 ms, faster than 54.55% of Python online submissions for Iterator for Combination. |
原题链接:leetcode.com/problems/it…
您的支持是我最大的动力
本文转载自: 掘金