LeetCode 5123. 字母组合迭代器 Iterator for Combination

Posted itdef

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 5123. 字母组合迭代器 Iterator for Combination相关的知识,希望对你有一定的参考价值。

地址 https://leetcode-cn.com/contest/biweekly-contest-15/problems/iterator-for-combination/

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

一个构造函数,输入参数包括:一个 有序且字符唯一 的字符串 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 时都存在下一个字母组合。

 

算法1
我的理解 大概就是DFS先生成各种组合吧 使用vector存储
然后再来应对 next hasnext的询问很简单的

C++ 代码

技术图片
 1 class CombinationIterator {
 2 public:
 3     int idx = 0;
 4     vector<string> vstr;
 5     vector<char> ele;
 6     void dfs(const string& s, int len, int idx)
 7     {
 8         if (ele.size() == len) {
 9             string str(ele.begin(), ele.end());
10             vstr.push_back(str);
11             return;
12         }
13         else if (idx == s.size()) {
14             return;
15         }
16 
17         ele.push_back(s[idx]);
18         dfs(s, len, idx + 1);
19         ele.pop_back();
20 
21         dfs(s, len, idx + 1);
22     }
23 
24     CombinationIterator(string characters, int combinationLength) {
25         dfs(characters,combinationLength,0); 
26         idx = 0;
27     }
28 
29     string next() {
30         return vstr[idx++];
31     }
32 
33     bool hasNext() {
34         if(idx < vstr.size())
35             return true;
36 
37         return false;
38     }
39 };
40 
41 /**
42  * Your CombinationIterator object will be instantiated and called as such:
43  * CombinationIterator* obj = new CombinationIterator(characters, combinationLength);
44  * string param_1 = obj->next();
45  * bool param_2 = obj->hasNext();
46  */
47 
48 作者:defddr
49 链接:https://www.acwing.com/solution/LeetCode/content/7022/
50 来源:AcWing
51 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Code

 

以上是关于LeetCode 5123. 字母组合迭代器 Iterator for Combination的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 It.IsIn(someRange) 对多个字段的 POCO 属性组合进行迭代?

c++中迭代器的问题为啥这样会报错?

LeetCode #17 电话号码的字母组合

leetcode-电话号码的字母组合

leetcode-电话号码的字母组合

Python 迭代器