1. 全排列(無重復元素)
核心思想:交換法避免額外空間
def permute(nums):def backtrack(first=0):if first == len(nums):res.append(nums.copy())returnfor i in range(first, len(nums)):nums[first], nums[i] = nums[i], nums[first]backtrack(first + 1)nums[first], nums[i] = nums[i], nums[first]res = []backtrack()return res
2. 全排列II(含重復元素)
關鍵點:剪枝去重
def permuteUnique(nums):nums.sort()res = []def backtrack(path, used):if len(path) == len(nums):res.append(path.copy())returnfor i in range(len(nums