请你设计一个迭代器类,包括以下内容:
一个构造函数,输入参数包括:一个 有序且字符唯一 的字符串 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 时都存在下一个字母组合。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/iterator-for-combination
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class CombinationIterator:def __init__(self, characters: str, combinationLength: int):self.cha = characters# 建立列表用来保存各种字母组合在characters中的索引self.com = [x for x in range(combinationLength)]self.finished = Falsedef next(self) -> str:# 当前排列方式所对应的字符串ans = "".join([self.cha[i] for i in self.com])# 此值用来判断是否为最后一种字母组合x = -1# 判断当前字母组合是否为最后一种for i in range(len(self.com) - 1, -1, -1):if self.com[i] != len(self.cha) - len(self.com) + i:x = ibreakif x == -1:self.finished = Trueelse:# 切换为下种字母组合self.com[x] += 1# 若某索引进行更改,则其后面的索引都必须增大,否则会出现冲突for j in range(x + 1, len(self.com)):self.com[j] = self.com[j - 1] + 1return ansdef hasNext(self) -> bool:# 若为最后一种排列方式则不存在下一个字母组合return not self.finished  # Your CombinationIterator object will be instantiated and called as such:
# obj = CombinationIterator(characters, combinationLength)
# param_1 = obj.next()
# param_2 = obj.hasNext()

1286.字母组合迭代器相关推荐

  1. LeetCode 1286. 字母组合迭代器(回溯/位运算)

    文章目录 1. 题目 2. 解题 2.1 回溯 2.2 位运算 1. 题目 请你设计一个迭代器类,包括以下内容: 一个构造函数,输入参数包括:一个 有序且字符唯一 的字符串 characters(该字 ...

  2. 【光剑藏书轩2021】《知识的错觉》读书笔记

    "你以为自己知道,其实你并不知道." 以为自己掌握了知识的全貌,实际却只是一小部分而已. 这就跟盲人摸象闹出的笑话一样:高个子盲人摸到大象的耳朵,以为大象是一把蒲扇,矮个子盲人摸到 ...

  3. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  4. LeetCode 700题 题解答案集合 Python

    2019.5.12更新至题号796,目前共有265题. 2019.5.26更新至题号72, 目前共有347题. 2019.6.16更新至题号70,目前共有382题. 2019.7.7更新至题号5120 ...

  5. leetcode题目

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>Lee ...

  6. 数学(持续更新、整理)

    两数相加:leetcode-2 Z字形变换:leetcode-6 整数反转:leetcode-7 Pow(x, n):leetcode-50 排列序列:leetcode-60 爬楼梯:leetcode ...

  7. redis之十五(游标迭代器(过滤器)——Scan)

    一个问题引发的「血案」 曾经发生过这样一件事,我们的 Redis 服务器存储了海量的数据,其中登录用户信息是以 user_token_id 的形式存储的.运营人员想要当前所有的用户登录信息,然后悲剧就 ...

  8. 完全理解Python迭代对象、迭代器、生成器

    本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文的中译版本,推荐阅读原文,谢谢网 ...

  9. 2021年大数据常用语言Scala(十九):基础语法学习 iterator迭代器

    目录 iterator迭代器 使用迭代器遍历集合 iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可 ...

最新文章

  1. 注意语句顺序 防止Servlet Request Response乱码
  2. php+sqlserver实现分页效果
  3. Flowable学习笔记(二、BPMN 2.0-基础 )
  4. 买到假芯片,血的教训!
  5. bootstrapV4.6.0实现标签页(改造v3.3.7)- 代码篇
  6. python遍历数组冒泡排序_Python算法(一) 数组冒泡排序(难度等级:easy)
  7. margin-top/bottom(padding-top/bottom)百分比以祖级宽度计算
  8. Ubuntu查看crontab运行日志
  9. php连接mysql MariaDB_PHP+MariaDB数据库操作基本技巧
  10. Apache Airflow调度中心发布任务步骤
  11. 微生物群落组装过程(assembly processes)
  12. win7系统msi文件无法安装历程
  13. XCode14 iOS16适配 pod签名
  14. 河北保定计算机学校大专分数线,河北多少分能上大专,河北大专院校最低分数线...
  15. Android源码是这样搞到的(图解)
  16. Dubbo面试八股文—1
  17. Google又发布操作系统,这次能像Android一样统治世界?
  18. 【TYVJ】1307 联络员(最小生成树)
  19. python查找文件夹中的指定文件_python 递归搜索文件夹下的指定文件
  20. 厦门国际银行数创金融杯建模大赛

热门文章

  1. shell脚本自动化创建虚拟机的基本配置--tomcat--mysql--jdk--maven---妈妈再也不用担心我不会配置虚拟机了!
  2. 无数据 无网络view
  3. 【Linux】创建、修改和删除用户(useradd | usermod | userdel)
  4. 软件开发团队的有效管理和激励
  5. Global Illumination_Spherical Harmonic Lighting(球谐光照)
  6. php采集淘宝店的评论,php采集淘宝店铺的所有评论的实现
  7. 测试策略与测试计划,有什么区别?
  8. 《C语言程序设计》第4版 何钦铭、颜晖主编 课后习题答案 第12章 习题12
  9. cJSON详细剖析(四)----cJSON_Print()函数
  10. linux的双系统修复工具下载,EasyBCD(系统引导修复工具)