详见牛客官方题解思路
以abc为例(个人理解):
f(a,b,c)=af(b,c)+bf(a,c)+cf(b,a);
f(b,c)=bf(c)+cf(b)=bc+cb;
f(c)=c;
发现:af(b,c)=abc+acb,ss通过调换相应位置的值,就可以实现以上想要的结果;
f(b,c)不调换是bf(c),即ss=abc;调换后是cf(b),即ss=acb;
f(c)一个值不用再调换,ss就是所求的值
bf(a,c)+cf(b,a)看作b,a互换,c,a互换;
# -*- coding:utf-8 -*- class Solution: def Permutation(self, ss): res=set() self.perm(0,ss,len(ss),res) return sorted(res) def perm(self,pos,ss,size,res): #递归退出条件 if pos+1==size: res.add(ss) return for i in range(pos,size): ss=self.swap_str(pos,i,ss) #交换 self.perm(pos+1,ss,size,res) #递归 ss = self.swap_str(pos, i, ss) #回溯 #交换字符串位置值 def swap_str(self,pos1,pos2,ss): ls=list(ss) ls[pos1],ls[pos2]=ls[pos2],ls[pos1] return ''.join(ls)