C++之二叉树的前序遍历思想(递归版本)相关题目题解

题目来源于拼多多

多多鸡打算造一本自己的电子字典,里面的所有单词都只由a和b组成。
每个单词的组成里a的数量不能超过N个且b的数量不能超过M个。多多鸡的幸运数字是K,它打算把所有满足条件的单词里的字典序第K小的单词找出来,作为字典的封面。
C++之二叉树的前序遍历思想(递归版本)相关题目题解_第1张图片
把其看为一个二叉树如下
C++之二叉树的前序遍历思想(递归版本)相关题目题解_第2张图片
代码思路就来了

#include
#include
#include
using namespace std;
class Solution{
     
  public:
    vector<string> res;
    vector<string> Magic_box(int n,int m,string tmp)
    {
     
            if(n!=0)
            {
     
                tmp.push_back('a');
                res.push_back(tmp);
                Magic_box(n-1,m,tmp);
                tmp.pop_back();
            }
            if(m!=0)
            {
     
                tmp.push_back('b');
                res.push_back(tmp);
                 Magic_box(n,m-1,tmp);
                 tmp.pop_back();
            }
            return res;
            
    }
};
 
 
int main()
{
     
    Solution s;
    string tmp="";
    int n,m,k;
    cin>>n;
    cin>>m;
    cin>>k;
    auto str=s.Magic_box(n,m,tmp);
    for(int i=0;i<str[k-1].size();i++)
    {
     
        cout<<str[k-1][i];
    }
    return 0;
}

你可能感兴趣的:(C++之二叉树的前序遍历思想(递归版本)相关题目题解)