# combination/subsetdefbacktrack(nums:List[int],start:int):foriinrange(start,len(nums)):# selecttrack.append(nums[i])# next layer in treebacktrack(nums,i+1)# restoretrack.pop()# permutationdefbacktrack(nums:List[int]):foriinrange(len(nums)):# cutting edgeifused[i]:continue# selectused[i]=Truetrack.append(nums[i])# next layerbacktrack(nums)# restoretrack.pop()used[i]=False
nums.sort()# combination/subsetdefbacktrack(nums:List[int],start:int):foriinrange(start,len(nums)):# cutting edgeifi>startandnums[i]==nums[i-1]:continue# selecttrack.append(nums[i])# next layer in treebacktrack(nums,i+1)# restoretrack.pop()# permutationdefbacktrack(nums:List[int]):foriinrange(len(nums)):# cutting edgeifused[i]:continueifi>0andnums[i]==nums[i-1]andnotused[i-1]:continue# selectused[i]=Truetrack.append(nums[i])# next layerbacktrack(nums)# restoretrack.pop()used[i]=False
No duplicated elements, duplicable selection
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# combination/subsetdefbacktrack(nums:List[int],start:int):foriinrange(start,len(nums)):# selecttrack.append(nums[i])# next layer in treebacktrack(nums,i)# restoretrack.pop()# permutationdefbacktrack(nums:List[int]):foriinrange(len(nums)):# selecttrack.append(nums[i])# next layerbacktrack(nums)# restoretrack.pop()