标签:add length linked start and sign star mos rate
Design an Iterator class, which has:
characters
of sorted distinct lowercase English letters and a number combinationLength
as arguments.combinationLength
in lexicographical order.True
if and only if there exists a next combination.
Example:
CombinationIterator iterator = new CombinationIterator("abc", 2); // creates the iterator. iterator.next(); // returns "ab" iterator.hasNext(); // returns true iterator.next(); // returns "ac" iterator.hasNext(); // returns true iterator.next(); // returns "bc" iterator.hasNext(); // returns false
Constraints:
1 <= combinationLength <= characters.length <= 15
10^4
function calls per test.next
are valid.class CombinationIterator { PriorityQueue<String> pq = new PriorityQueue<>(); public CombinationIterator(String s, int k) { generateSub(s,k,0,new StringBuilder()); } private void generateSub(String s ,int len,int start,StringBuilder result) { if (len == 0){ pq.add(result.toString()); return; } for (int i = start; i <= s.length()-len; i++){ result.append(s.charAt(i)); generateSub(s, len-1, i+1, result); result.deleteCharAt(result.length()-1); } } public String next() { return pq.poll(); } public boolean hasNext() { return !pq.isEmpty(); } }
class CombinationIterator { Queue<String> qu = new LinkedList(); String orig = ""; public CombinationIterator(String characters, int combinationLength) { orig = characters; find("", 0, combinationLength); } void find(String str, int index, int len) { if(len ==0) { qu.add(str); return; } for(int i= index; i<orig.length(); i++) { char ch = orig.charAt(i); find(str+ch , i+1, len-1); } } public String next() { if(!qu.isEmpty()) { return qu.poll(); } return ""; } public boolean hasNext() { return !qu.isEmpty(); } }
1286. Iterator for Combination
标签:add length linked start and sign star mos rate
原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12078968.html