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();
        }
    }
  • 相关阅读:
    jquery 代码搜集
    Windows Server 2008中安装IIS7.0
    javascript 判断两个日期之间的天数 兼容ie,firefox
    jquery选择器大全
    原始ajax方式调用asp.net后台方法
    JavaScript及C# URI编码详解
    利用JQuery直接调用asp.net后台方法
    C#操作XML小结_转载
    从bnbt tracker源码分析bt客户端与traker的通信
    传说中的神器: shared_ptr/weak_ptr/scoped_ptr
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12078968.html
Copyright © 2011-2022 走看看