""" 全排列生成 — 递归交换法 生成 n 个元素的所有排列 (n!) """ def permute(arr, start, end): """递归生成全排列""" if start == end: print("".join(map(str, arr))) else: for i in range(start, end + 1): arr[start], arr[i] = arr[i], arr[start] permute(arr, start + 1, end) arr[start], arr[i] = arr[i], arr[start] # 回溯 def permute_unique(arr, start, end): """生成去重全排列""" if start == end: print("".join(map(str, arr))) else: seen = set() for i in range(start, end + 1): if arr[i] not in seen: seen.add(arr[i]) arr[start], arr[i] = arr[i], arr[start] permute_unique(arr, start + 1, end) arr[start], arr[i] = arr[i], arr[start] if __name__ == "__main__": print("全排列 [1,2,3]:") permute([1, 2, 3], 0, 2) print("\n去重全排列 [1,1,2]:") permute_unique([1, 1, 2], 0, 2)