leetcode1415长度为n的开心字符串中字典序第k小的字符串(回溯)

    科技2024-06-04  57

    题目描述: 一个 「开心字符串」定义为:

    仅包含小写字母 [‘a’, ‘b’, ‘c’]. 对所有在 1 到 s.length - 1 之间的 i ,满足 s[i] != s[i + 1] (字符串的下标从 1 开始)。 比方说,字符串 “abc”,“ac”,“b” 和 “abcbabcbcb” 都是开心字符串,但是 “aa”,“baa” 和 “ababbc” 都不是开心字符串。

    给你两个整数 n 和 k ,你需要将长度为 n 的所有开心字符串按字典序排序。

    请你返回排序后的第 k 个开心字符串,如果长度为 n 的开心字符串少于 k 个,那么请你返回 空字符串 。

    思路: 回溯法

    代码如下:

    class Solution { public: string s,res; int cnt=0; string getHappyString(int n, int k) { dfs(n,k); return cnt==k?res:""; } void dfs(int n,int k){ if(cnt==k) return; if(s.size()==n){ res=s; cnt++; return; } for(char q='a';q<='c';q++){ if(s.size()&&s.back()==q) continue; s.push_back(q); dfs(n,k); s.pop_back(); } } };
    Processed: 0.012, SQL: 8