码迷,mamicode.com
首页 > 其他好文 > 详细

1286. Iterator for Combination

时间:2019-12-22 10:23:29      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:add   length   linked   start   and   sign   star   mos   rate   

Design an Iterator class, which has:

  • A constructor that takes a string characters of sorted distinct lowercase English letters and a number combinationLength as arguments.
  • A function next() that returns the next combination of length combinationLength in lexicographical order.
  • A function hasNext() that returns 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
  • There will be at most 10^4 function calls per test.
  • It‘s guaranteed that all calls of the function 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!