• LeetCode 1286. 字母组合迭代器 Iterator for Combination


    地址 https://leetcode-cn.com/contest/biweekly-contest-15/problems/iterator-for-combination/

    题目描述
    请你设计一个迭代器类,包括以下内容:

    一个构造函数,输入参数包括:一个 有序且字符唯一 的字符串 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 时都存在下一个字母组合。

    算法1
    我的理解 大概就是DFS先生成各种组合吧 使用vector存储
    然后再来应对 next hasnext的询问很简单的

    C++ 代码

     1 class CombinationIterator {
     2 public:
     3     int idx = 0;
     4     vector<string> vstr;
     5     vector<char> ele;
     6     void dfs(const string& s, int len, int idx)
     7     {
     8         if (ele.size() == len) {
     9             string str(ele.begin(), ele.end());
    10             vstr.push_back(str);
    11             return;
    12         }
    13         else if (idx == s.size()) {
    14             return;
    15         }
    16 
    17         ele.push_back(s[idx]);
    18         dfs(s, len, idx + 1);
    19         ele.pop_back();
    20 
    21         dfs(s, len, idx + 1);
    22     }
    23 
    24     CombinationIterator(string characters, int combinationLength) {
    25         dfs(characters,combinationLength,0); 
    26         idx = 0;
    27     }
    28 
    29     string next() {
    30         return vstr[idx++];
    31     }
    32 
    33     bool hasNext() {
    34         if(idx < vstr.size())
    35             return true;
    36 
    37         return false;
    38     }
    39 };
    40 
    41 /**
    42  * Your CombinationIterator object will be instantiated and called as such:
    43  * CombinationIterator* obj = new CombinationIterator(characters, combinationLength);
    44  * string param_1 = obj->next();
    45  * bool param_2 = obj->hasNext();
    46  */
    47 
    48 作者:defddr
    49 链接:https://www.acwing.com/solution/LeetCode/content/7022/
    50 来源:AcWing
    51 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    View Code
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    poj1673EXOCENTER OF A TRIANGLE
    poj1474Video Surveillance(半平面交)
    poj1584A Round Peg in a Ground Hole
    poj1696Space Ant(逆时针螺旋形)
    点分治(树分治)
    LCT(link cut tree) 动态树
    树链剖分
    Codeforces Round #475 (Div. 2)
    openCV学习——一、Mat类
    openCV学习——一、图像读取、显示、输出
  • 原文地址:https://www.cnblogs.com/itdef/p/12041651.html
Copyright © 2020-2023  润新知