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