Problem
Given a collection of distinct numbers, return all possible permutations.
For example,
[1,2,3] have the following permutations:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
Idea
- 方法一:使用递归,完成遍历“从原始list里面选一个元素,append到新的list中”。
- 方法二:使用三层循环–选择未排序的元素,遍历位置插入已排序的list中。
Solution
- 方法一
class Solution(object):
result =[]
def select(self,res,tmp):
if len(tmp)==1:
res.append(tmp[0])
self.result.append(res)
else:
length = len(tmp)
for i in xrange(0,length):
res_tmp = list(res)
tmp_tmp = list(tmp)
res_tmp.append(tmp[i])
tmp_tmp.remove(tmp[i])
self.select(res_tmp,tmp_tmp)
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res=[]
self.result=[]
self.select(res,nums)
return self.result
2.方法二(参考)
很精简的答案!
使用三层循环–外层遍历listnews的每个元素n,中层循环遍历list[list]perms的每个元素perm,内层循环遍历listperm的每个位置,并把元素n插入到listperm中。最后更新perms。
def permute(self, nums):
perms = [[]]
for n in nums:
new_perms = []
for perm in perms:
for i in xrange(len(perm)+1):
new_perms.append(perm[:i] + [n] + perm[i:]) ###insert n
perms = new_perms
return perms

本文介绍了解决给定一组不重复数字生成所有可能排列的问题。提供了两种解决方案:一是使用递归方法,通过不断从原始列表中选取元素并将其添加到新列表中来生成排列;二是采用三层循环方式,在已有的排列基础上插入未排序的元素,生成新的排列。
187

被折叠的 条评论
为什么被折叠?



