请你设计一个迭代器类,包括以下内容:
- 一个构造函数,输入参数包括:一个 有序且字符唯一 的字符串
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 {
public:
int cur;
vector<string> v;
string t;
int n;
void dfs(int p, string cur) {
if(cur.size() == n) {
v.push_back(cur);
return;
}
if(p == t.size()) return;
dfs(p+1, cur);
cur += t[p];
dfs(p+1, cur);
}
CombinationIterator(string s, int nn) {
t = s;n = nn;
dfs(0,"");
sort(v.begin(),v.end());
cur = 0;
}
string next() {
cur++;
return v[cur-1];
}
bool hasNext() {
return cur < v.size();
}
};
/**
* Your CombinationIterator object will be instantiated and called as such:
* CombinationIterator* obj = new CombinationIterator(characters, combinationLength);
* string param_1 = obj->next();
* bool param_2 = obj->hasNext();
*/

京公网安备 11010502036488号