题目:
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
思路:
这应该是每个程序员都应该掌握的算法题吧。基本思路就是对应一个排列来说,我们需要遍历一遍nums集合,先确定开头的数字,然后选定下一个数字,就像一棵树一样,在分叉的地方有多个分支,那么这里的分支就是除了开头选定的数字外的其他数字。
代码:
class Solution:
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if len(nums) == 0:
return []
self.results = []
for index, num in enumerate(nums):
tempResult = []
tempResult.append(num)
self.helper(nums, tempResult)
return self.results
def helper(self,nums,tempResult):
tempResult1 = copy.deepcopy(tempResult)
if len(tempResult) == len(nums):
self.results.append(tempResult1)
else:
for num in nums:
if num not in tempResult1:#遍历没有在tempResult1内的数字
tempResult1.append(num)
self.helper(nums,tempResult1)
tempResult1.pop()
if __name__ =="__main__":
res = Solution()
print(res.permute([1,2,3]))
pass