题解 | #牛牛的字符串排列#
牛牛的字符串排列
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加入现有的字符串,然后遍历,根据递归的性质,这样保证我们每次都加入在字典序前面的字符,从而满足题目要求的字典序排列的要求。