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

一个 「开心字符串」定义为:

仅包含小写字母 ['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 个,那么请你返回 空字符串 。

1.回溯算法

class Solution:
    def getHappyString(self, n: int, k: int) -> str:
        tmp=[]
        def dfs(i,s):
            if i<0:return 
            if len(s)==n:
                tmp.append(''.join(s))
                return 
            for one in ['a','b','c']:
                if s and s[-1]!=one:dfs(i-1,s+[one])
                else:dfs(i-1,[one])

        dfs(n,[])
        return tmp[k-1] if k<=len(tmp) else  ""
        

 

你可能感兴趣的:(Leetcode)