题解 | #字符串的排列# python排列组合方法
字符串的排列
http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7
class Solution:
def Permutation(self , str: str) -> List[str]:
r=list(str)#将字符串转为列表
res=[]#定义返回值列表
def recur(k):#k为此次递归需要排列的坐标位置
if k==len(str)-1:#当k等于最后一个元素坐标时,说明已经遍历过了所有元素
res.append(''.join(r))#则将排列好的字符串放入返回值列表
return#结束此次递归
tmp=[]#定义存储已遍历的元素的列表,用于判断元素是否已被排列过,避免重复使用
for i in range(k,len(r)):#循环遍历从k开始到最后的所有元素
if r[i] not in tmp:#如果遍历到的元素不在tmp中,说明该元素是第一次被排列
tmp.append(r[i])#先将该元素放入tmp中,表明该元素已被排列过
#将坐标k位置的元素设为坐标i位置的元素,同时将坐标i位置的元素设为坐标k位置的元素,即交换
r[k],r[i]=r[i],r[k]
recur(k+1)#递归确定坐标k+1位置的元素,进行该递归时,r中坐标k+1及以后的元素均未进行过排列
#结束上个递归时,将坐标k和i位置的元素再交换回来,避免影响此次for循环中第k个元素的其它排列选择
r[k],r[i]=r[i],r[k]
recur(0)#从确定第一个元素开始递归
return res