1415. 长度为 n 的开心字符串中字典序第 k 小的字符串

在这里插入图片描述
在这里插入图片描述

// class Solution {
// public:
//     vector<string>res;
//     string s="abc";
//     void  dfs (int start,int h,string &ans){
//         ans+=s[start];
//         if(h==1) {
//             res.push_back(ans);
//             return ;
//         } 
//         for(int i=0;i<s.size();i++){
//             if( i==start) continue;
//             string tmp2=ans;
//             dfs(i,h-1,ans);        
//             ans=tmp2;
            
//         }
//     }
//     string getHappyString(int n, int k) {
//         string ans="";
//         for(int i=0;i<3;i++){
//              dfs(i,n,ans);
//              ans="";
//         }    
//         // for (auto x:res) cout<<x<<endl;
//         if(k>res.size()) return "";
//             return res[k-1];
//     }
// };


class Solution {
public:
    string res;
    string s="abc";
    void  dfs (int n,int & k,string &ans){
        if(ans.size()==n) {
            k-=1;
            if(k==0)
                res=ans;
            return ;
        } 
        for(int i=0;i<s.size();i++){
            if(ans.size()==0 || ans[ans.size()-1]!=s[i]){
                ans+=s[i];
                dfs(n,k,ans); 
                ans.pop_back();
            }
        }
    }
    string getHappyString(int n, int k) {
        string ans="";
        dfs(n,k,ans);
            return res;
    }
};
class Solution:
    def getHappyString(self, n: int, k: int) -> str:
        res=None 
        
        def dfs(s):
            nonlocal k,res
            if(len(s)==n):
                k=k-1
                if k==0:
                    res=s
                return
            for c in ['a','b','c']:
                if not s or s[-1]!=c:
                    dfs(s+c)
        dfs("")
        return "" if  not res else res

猜你喜欢

转载自blog.csdn.net/qq_38662930/article/details/107583320