目录
设计 CombinationIterator 迭代器类 —— 字典序生成字母组合
设计 CombinationIterator 迭代器类 —— 字典序生成字母组合
题目描述
设计一个迭代器类 CombinationIterator
,用于按字典序依次返回指定长度的字母组合。具体要求如下:
- 构造函数
CombinationIterator(string characters, int combinationLength)
输入参数为一个有序且字符唯一的字符串characters
(只包含小写字母)和一个数字combinationLength
。 - 函数
next()
按字典序返回长度为combinationLength
的下一个字母组合。 - 函数
hasNext()
只有存在长度为combinationLength
的下一个字母组合时,返回true
;否则返回false
。
举例:
characters = "abcde"
, combinationLength = 3
调用顺序和返回值如下:
next()
→ "abc"
next()
→ "abd"
next()
→ "abe"
...
直到所有长度为3的组合全部返回完毕。
解题分析
本题的核心是如何有效且按字典序生成所有指定长度的字符组合。
关键点:
- 字母组合的字典序
由于输入字符串characters
已有序且字符唯一,组合的字典序由组合中字母的索引决定。 - 组合的枚举方式
生成长度为combinationLength
的所有字符组合是一个经典的组合问题。可以采用ÿ