请你设计一个迭代器类,包括以下内容:
一个构造函数,输入参数包括:一个 有序且字符唯一 的字符串 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/iterator-for-combination
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class CombinationIterator {
public:
CombinationIterator(string characters, int combinationLength) {
dfs(characters,combinationLength,0,"");
reverse(paths.begin(),paths.end());
}
void dfs(string str,int len,int index,string path){
if (path.size() == len) {
paths.push_back(path);
return;
}
for (int i = index; i < str.size(); i++) {
dfs(str, len, i + 1, path + str[i]);
}
}
string next() {
string temp = paths[paths.size()-1];
paths.pop_back();
return temp;
}
bool hasNext() {
return !paths.size()==0;
}
private:
vector<string> paths;
};
/**
* 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();
*/