Leetcode做题日记:46. 全排列(PYTHON)

给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

输入: [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%

猜你喜欢

转载自blog.csdn.net/weixin_44033136/article/details/86436372