zoukankan      html  css  js  c++  java
  • 1286. Iterator for Combination

    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();
        }
    }
  • 相关阅读:
    服务器的小程序,可以通过浏览器访问该服务器自定义的内容
    GUI小程序---理解GUI
    迷你MyBank
    使用Scanner输入数据-读取文本数据
    文件拷贝代码模型
    File文件操作类
    链表
    ThreadLocal类使用理解
    二叉树
    比较器比较对象数组Comparable和Comparator区别
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12078968.html
Copyright © 2011-2022 走看看