全排列问题使用回溯法,具体可以参考代码回想录组合与排列的区别,回溯算法求解的时候,有何不同?| LeetCode:46.全排列_哔哩哔哩_bilibili
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result = []
self.backtrack(nums, [], [False]*len(nums), result)
return result
def backtrack(self,nums,path,used,result):
if len(path)==len(nums):
result.append(path[:]) #注意引用传递和浅拷贝的区别
return
for i in range(len(nums)):
if used[i]==True:
continue
used[i] = True
path.append(nums[i])
self.backtrack(nums,path,used,result)
path.pop()
used[i] = False