题目描述:
请你设计一个迭代器类,包括以下内容:
一个构造函数,输入参数包括:一个 有序且字符唯一 的字符串 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
emm,还行,使用回溯首先将所有的情况都给遍历得出来放入到list中,然后直接取出索引进行遍历即可,思路清晰
class CombinationIterator {
String tem = null;
int length = 0;
int index = 0;
List<String> list = new ArrayList<>();
public CombinationIterator(String characters, int combinationLength) {
tem = new String(characters);
length = combinationLength;
get("",0);
}
public void get(String curstring,int cur){
if(cur == tem.length() && curstring.length() == length){
list.add(new String(curstring));
return;
}
if(cur == tem.length() ){
return;
}
get(curstring + tem.charAt(cur),cur + 1);
get(curstring,cur + 1);
}
public String next() {
return list.get(index++);
}
public boolean hasNext() {
return list.size() > index;
}
}
/**
* Your CombinationIterator object will be instantiated and called as such:
* CombinationIterator obj = new CombinationIterator(characters, combinationLength);
* String param_1 = obj.next();
* boolean param_2 = obj.hasNext();
*/