题解 | #牛牛的字符串排列#

牛牛的字符串排列

https://www.nowcoder.com/practice/5286dafdcdff4c9a9e92c7dc440143db

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @param k int整型 
# @return string字符串一维数组
#
class Solution:
    def getPermutation(self , s: str, k: int) -> List[str]:
        # write code here
        # s <= 8  8! = 4*10**4
        # 字典序排列,可以到k就中断
        ans = set()
        def getP(cur, left):
            # BC
            if len(ans) == k:
                return # 已经搜集到足够的串
            
            if not left:
                ans.add(''.join(cur))
                return
            
            # 字典序
            left = sorted(left)
            # 首字母选择排序
            for i in range(len(left)):
                cur_L = left[i]
                getP(cur + [cur_L], left[:i] + left[i+1:])

            
        getP([], list(s))

        return sorted(list(ans))

因为需要记录路径,并且只需要字典序前k个,所以考虑使用DFS,一旦满足k个就不需要继续了。

每次将排序后的第一个char加入现有的字符串,然后遍历,根据递归的性质,这样保证我们每次都加入在字典序前面的字符,从而满足题目要求的字典序排列的要求。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务