博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 1286. 字母组合迭代器(回溯/位运算)
阅读量:2008 次
发布时间:2019-04-28

本文共 1892 字,大约阅读时间需要 6 分钟。

文章目录

1. 题目

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

  • 一个构造函数,输入参数包括:一个 有序且字符唯一 的字符串 characters(该字符串只包含小写英文字母)和一个数字 combinationLength 。
  • 函数 next() ,按 字典序 返回长度为 combinationLength 的下一个字母组合。
  • 函数 hasNext() ,只有存在长度为 combinationLength 的下一个字母组合时,才返回 True;否则,返回 False。
示例:CombinationIterator iterator = new CombinationIterator("abc", 2); // 创建迭代器 iteratoriterator.next(); // 返回 "ab"iterator.hasNext(); // 返回 trueiterator.next(); // 返回 "ac"iterator.hasNext(); // 返回 trueiterator.next(); // 返回 "bc"iterator.hasNext(); // 返回 false 提示:1 <= combinationLength <= characters.length <= 15每组测试数据最多包含 10^4 次函数调用。题目保证每次调用函数 next 时都存在下一个字母组合。

来源:力扣(LeetCode)

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

2. 解题

2.1 回溯

  • 回溯法,先全部求出来,存起来备用
class CombinationIterator {
vector
ans; string path; int id = 0;public: CombinationIterator(string characters, int combinationLength){
dfs(characters, combinationLength, 0); } void dfs(string &s, int n, int idx) {
if(path.size() == n) {
ans.push_back(path); return; } for(int i = idx; i < s.size(); ++i) {
path.push_back(s[i]); dfs(s, n, i+1);//下一个字符只能更大+1开始找 path.pop_back(); } } string next() {
return ans[id++]; } bool hasNext() {
return id < ans.size(); }};

32 ms 12.8 MB

2.2 位运算

在这里插入图片描述

class CombinationIterator {
int bits; string s; int len;public: CombinationIterator(string characters, int combinationLength) {
s = characters; bits = (1<
0 && countOne(bits) != len) bits--; string t; for(int i = s.size()-1; i >= 0; --i) {
if((bits>>i)&1) t += s[s.size()-i-1];//字符串是从左往右的,序号0开始 } bits--;//下一个数,下次搜索的起点 return t; } bool hasNext() {
while(bits > 0 && countOne(bits) != len) bits--; return bits > 0; }};

20 ms 12 MB

你可能感兴趣的文章
MAIN/autoslb.py · 林語/autoslb - 码云 - 开源中国
查看>>
chrome --headless --disable-gpu --dump-dom http://www.python.org
查看>>
Creating a headless Chrome instance in Python - Stack Overflow
查看>>
牛客网-专业IT笔试面试备考平台,最全C++JAVA前端求职题库,全面提升IT编程能力...
查看>>
可译网 —— 翻译可以更简单
查看>>
【图文】红豆薏米水的做法_红豆薏米水的家常做法_红豆薏米水怎么做好吃_做法步骤,视频_红豆薏米水-美食天下...
查看>>
最新活动_湃睿科技 ptc windchill
查看>>
Oracle PLM - 璞华官网
查看>>
做CloudXNS产品运营的这半年 – CHINA Testers
查看>>
HSTS Preloading
查看>>
全局负载均衡与CDN网络简介 - 陈年的馒头的专栏 - 博客频道 - CSDN.NET
查看>>
stunnel: Home
查看>>
从零到百亿互联网金融架构发展史 - 纯洁的微笑 - 博客园
查看>>
Paxos 实现日志复制同步(Multi-Paxos) - Richaaaard - 博客园
查看>>
浅谈:数据中心灾备和多活的过去、现在与未来 - 亿恩科技
查看>>
由支付宝引发的“战争”:多活能不能战胜挖掘机? - CNET科技资讯网
查看>>
方回春堂
查看>>
Power BI Desktop | Microsoft Power BI
查看>>
Steltman Galleries - Michael Parkes
查看>>
Mercury:唯品会全链路应用监控系统解决方案详解(含PPT)_高可用架构_传送门
查看>>