给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
第一次的代码,竟然一次通过,不过,184ms,排名1.5% 。。。
递归+筛选:
#首先qplI先排列出所有数组的组合,比如[1,2],那么最后得到11,12,21,22
def qplI(x,ans1,ans2):
if len(ans1)==len(x) :
ans2.append(ans1)
else:
for i in x:
qplI(x,ans1+[i],ans2)
a=[]
qplI(nums,[],a)
b=[]
#筛选出没有重复数字的列表作为答案的一部分
for i in a:
aa=[]
for j in i:
if j not in aa:
aa.append(j)
if len(aa)==len(i): #判断无重复列表的长度是否和给定长度相同
b.append(i)
return b
当然不满足1.5%的排名
第二次的代码
def qplI(x,ans1,ans2):
if len(x)==0 : #因为使用一个数字,就会删除,那么当
#删除完毕,就结束
ans2.append(ans1)
else:
for i in range(len(x)):
qplI(x[:i]+x[i+1:],ans1+[x[i]],ans2)
#在这里改变x=x[:i]+x[i+1:],删除i位置的数字,就不会有重复的了
#避免再筛选这个步骤,比如[1,2,3],先确定1,下次递归x=[2,3]
a=[]
qplI(nums,[],a)
return a
48ms,排名86%