赞
踩
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:其实就是全排列问题,递归解决。然后set去重,再sort排序
归纳如下:n = 1 时,Perm(R) = r, 其中r是集合R中惟一的元素
n > 1 时,Perm(R)由(r1)1Perm(R1),(r2)1Perm(R2), ... , (rn)1Perm(Rn) 其中Ri = R - {ri}
依此递归定义,可设计如下的递归算法。
C/C++
Java
Python
- # -*- coding:utf-8 -*-
- class Solution:
- def __init__(self):
- self.result=[]
- def Permutation(self, ss):
- # write code here # 因为字符串不能修改特定下标的值
- s = [] # 也就是说这里不能交换,如ss=“abc”,不能交换成“cba”,需要用了list暂存一下
- to = len(ss)
- for i in range(to):
- s.append(ss[i])
- self.PermutationHelper(s,0,len(ss))
- self.result=list(set(self.result))
- self.result.sort()
- return self.result
- def PermutationHelper(self,ss,fro,to):
- if(to<=0):
- return
- if(fro==to-1):
- self.result.append(''.join(ss))
- else:
- for i in range(fro,to):
- ss[i], ss[fro] = ss[fro], ss[i] # 交换两个字符的值
- self.PermutationHelper(ss,fro+1,to)
- ss[fro], ss[i] = ss[i], ss[fro] # 上一层递归完成,再交换回来,便于下一次的递归
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。