leetcode_1286 字母组合迭代器

112 阅读1分钟

要求

请你设计一个迭代器类,包括以下内容:

  • 一个构造函数,输入参数包括:一个 有序且字符唯一 的字符串 characters(该字符串只包含小写英文字母)和一个数字 combinationLength 。
  • 函数 next() ,按 字典序 返回长度为 combinationLength 的下一个字母组合。
  • 函数 hasNext() ,只有存在长度为 combinationLength 的下一个字母组合时,才返回 True;否则,返回 False。

示例:

CombinationIterator iterator = new CombinationIterator("abc", 2); // 创建迭代器 iterator

iterator.next(); // 返回 "ab"
iterator.hasNext(); // 返回 true
iterator.next(); // 返回 "ac"
iterator.hasNext(); // 返回 true
iterator.next(); // 返回 "bc"
iterator.hasNext(); // 返回 false

提示:

  • 1 <= combinationLength <= characters.length <= 15
  • 每组测试数据最多包含 10^4 次函数调用。
  • 题目保证每次调用函数 next 时都存在下一个字母组合。

核心代码

class CombinationIterator:
    def __init__(self, characters: str, combinationLength: int):
        self.s = list(itertools.combinations(characters,combinationLength))
        self.index = 0

    def next(self) -> str:
        self.index += 1
        return "".join(self.s[self.index - 1])

    def hasNext(self) -> bool:
        return self.index < len(self.s)

# Your CombinationIterator object will be instantiated and called as such:
# obj = CombinationIterator(characters, combinationLength)
# param_1 = obj.next()
# param_2 = obj.hasNext()

image.png

解题思路:直接调用itertools.combinations函数对字符串进行求组合,得到的是tuple的格式数据,在返回的时候加上join拼接即可。

>>> for kk in itertools.combinations("abc",2):
        print(kk)
('a', 'b')
('a', 'c')
('b', 'c')
>>>