面试150 全排列
思路
此题需要用到回溯法,与组合不同,排列涉及到一个元素重复使用,因此我们不能再像原来那样使用startIndex。此题需要用到标记数组,对于使用过的元素标记为True,再次遍历的时候跳过该元素,该元素不能收集。路径的长度等于nums长度的时候收集结果。
class Solution:def permute(self, nums: List[int]) -> List[List[int]]:#排列是需要重复用到的if not nums:return [[]]self.path=[]self.result=[]def backtracking(nums,used):if len(self.path)==len(nums):self.result.append(self.path[:])for i in range(len(nums)):if used[i]:continueself.path.append(nums[i])used[i]=Truebacktracking(nums,used)self.path.pop()used[i]=Falsen=len(nums)used=[False]*n backtracking(nums,used)return self.result