描述
给定一个数字列表,返回其所有可能的排列。
你可以假设没有重复数字。
您在真实的面试中是否遇到过这个题?
样例
给出一个列表[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
if len(nums)==0:
return [[]]
self.results=[]
flags=[0 for i in range(len(nums))]
self.search( nums,[],flags)
return self.results
def search (self,nums,S,flags):
if len(S)==len(nums):
self.results.append(S)
for i in range(0,len(nums)):
if flags[i]==0:
flags[i] = 1
self.search(nums,S+[nums[i]],flags)
flags[i] = 0
nums = [1,2,3]
s = Solution()
print(s.permute(nums))