剑指 Offer 38. 字符串的排列
题目
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解思路
1>源代码
class Solution:
def permutation(self, s: str) -> List[str]:
s_list = list(s)
ans = []
def helper(s_list, start):
if start==len(s_list):
ans.append(''.join(s_list))
return
for i in range(start, len(s_list)):
s_list[i], s_list[start] = s_list[start], s_list[i]
helper(s_list, start+1)
s_list[i], s_list[start] = s_list[start], s_list[i]
helper(s_list, 0)
return list(set(ans))
2>算法介绍
上一次碰到这道题的时候完全没有思路,当时对回溯算法的代码结构还不熟练,这次再遇,我以很快的速度就完成了这题。
附上我写的LeetCode主站——全排列解析