JZ27 字符串的排列
动态规划
把问题分解为两步:
- 求第一个字符为所有可能的字母(把第一个字母和后面所有与第一个字符不等的字符交换)
- 固定第一个字符,求后面字符的排序
数组转换为字符串
eg.[‘a’, ‘b’]想转换为字符串,可用''.join(['a', 'b'])
得到’ab’
class Solution:
def __init__(self):
self.ret = []
def dp(self, s, i):
if i == len(s):
self.ret.append(''.join(s))
return
for j in range(i, len(s)):
if j==i or s[i]!=s[j]:
s[i], s[j] = s[j], s[i]
self.dp(s, i+1)
s[i], s[j] = s[j], s[i]
def Permutation(self, ss):
ss = list(ss)
if not ss:
return
self.dp(ss, 0)
return self.ret