详见牛客官方题解思路
以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)


京公网安备 11010502036488号