描述
给定一个数字列表,返回其所有可能的排列。
你可以假设没有重复数字。
您在真实的面试中是否遇到过这个题?
样例
给出一个列表[1,2,3],其全排列为:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
挑战
使用递归和非递归分别解决。
这一题属于排列问题,依然使用DFS。排列问题就要考虑是否选取了重复元素的问题,所以需要一个辅助数组来记录一个数是否被选过。
代码如下:
class Solution:
"""
@param: nums: A list of integers.
@return: A list of permutations.
"""
def permute(self, nums):
# write your code here
def search(nums,lists,index):
if(len(nums)==len(lists)):
self.result.append(lists)
return
for i in range(0,len(nums)):
if(self.flag[i]==1):continue
else :
self.flag[i]=1
search(nums,lists+[nums[i]],index+1)
self.flag[i]=0
self.result=[]
self.flag=[]
for i in range(len(nums)):
self.flag.append(0)
search(nums,[],0)
return self.result
s = Solution()
print(s.permute([1,2,3]))