1.题目
2.题目意思
排列组合嘛~
3.代码
解法1:
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
return list(itertools.permutations(nums))
思路:python函数
君子生非异也,善假于物也。
itertools.permutations(nums)
就是可以返回题目要求的全排列,把返回的元组放进列表就ok了~
解法2:
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
ans = []
l = []
def backtrack(nums):
if not nums:
# 注意浅拷贝
ans.append(l[:])
return
for num in nums:
# 1.设置现场
l.append(num)
# 注意浅拷贝
nums_temp = nums[:]
nums_temp.remove(num)
# 2.递归
backtrack(nums_temp)
# 3.恢复现场
l.pop()
backtrack(nums)
return ans
思路:回溯
设置两个数组,一个装结果,一个临时储存回溯的内容。不断往l中加入nums的元素,直到全部加进去。但是要注意浅拷贝问题,直接用nums_temp=nums
是不行的~
解法3:
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
res = []
def backtrack(nums, tmp):
if not nums:
res.append(tmp)
return
for i in range(len(nums)):
backtrack(nums[:i] + nums[i+1:], tmp + [nums[i]])
backtrack(nums, [])
return res
思路:回溯
精简版回溯,少用一个列表少占用一部分内存~
冲冲冲~