计算n个数的全排列,输入n,输出1,2,3,...n的全排列,利用分治法实现。
时间: 2024-05-16 16:14:52 浏览: 82
用分治法对数字排序
可以使用递归的分治思想来实现全排列的计算,具体步骤如下:
1. 如果n为1,则直接返回{1};
2. 如果n为2,则返回{{1,2}, {2,1}};
3. 如果n大于2,则递归计算n-1个数的全排列,然后将第n个数插入到每个排列的每个位置中,得到新的n个数的排列。
以下是使用Python实现的代码:
```python
def permute(nums):
if len(nums) == 1:
return [nums]
elif len(nums) == 2:
return [[nums[0], nums[1]], [nums[1], nums[0]]]
else:
result = []
sub_permutes = permute(nums[:-1])
for sub_permute in sub_permutes:
for i in range(len(sub_permute)+1):
new_permute = sub_permute[:i] + [nums[-1]] + sub_permute[i:]
result.append(new_permute)
return result
n = int(input("请输入n:"))
nums = list(range(1, n+1))
result = permute(nums)
for r in result:
print(r)
```
这段代码中,我们首先判断输入的n的大小,如果n为1或2,则直接返回对应的全排列;否则,我们递归地计算n-1个数的全排列,并将第n个数插入到每个排列的每个位置中,得到新的n个数的排列。最后,将所有排列返回。
我们将1到n的数存储在一个列表中,然后调用permute函数计算全排列,并将结果输出。在输出结果时,我们使用一个for循环遍历每个排列,并将其打印出来。
阅读全文