按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
时间: 2024-11-25 18:18:13 浏览: 67
生成自然数从1到n的所有不重复排列,也称为全排列,是一个经典的组合数学问题,可以使用递归和回溯算法解决。基本思路是从1到n中选择一个数,将其放在当前位置,然后对于剩余的数再递归地生成全排列。下面是一个简单的Python实现,基于深度优先搜索:
```python
def permute(nums, start=0):
# 如果已经到达了数组的末尾,就将当前排列添加到结果列表中
if start == len(nums):
result.append(nums[:])
else:
for i in range(start, len(nums)):
# 交换nums[start]和nums[i]
nums[start], nums[i] = nums[i], nums[start]
# 递归处理剩余部分
permute(nums, start + 1)
# 回溯,恢复当前节点的状态
nums[start], nums[i] = nums[i], nums[start]
# 初始化一个空的结果列表
result = []
n = int(input()) + 1
nums = [i for i in range(1, n)]
permute(nums)
for permutation in result:
print(permutation)
print("所有不重复排列:")
阅读全文