用递归生成整数的全排列
时间: 2024-05-16 17:15:16 浏览: 83
递归实现全排列
递归生成整数的全排列可以通过交换数组中的元素来实现。具体步骤如下:
1. 假设有一个长度为n的整数数组nums,我们需要生成它的全排列。
2. 定义一个递归函数permute,它有两个参数:当前要处理的子数组nums[start:],以及当前已经生成的前缀perfix。
3. 如果当前子数组为空,说明已经生成了一个全排列,将perfix加入结果集中。
4. 如果当前子数组不为空,对于子数组中的每个元素nums[i],都将其与nums[start]交换,然后递归调用permute(nums, start+1, prefix+[nums[start]]),完成之后再将nums[i]和nums[start]交换回来。
下面是Python代码实现:
```python
def permute(nums, start=0, prefix=[]):
if start == len(nums):
# 已经生成了一个全排列
result.append(prefix)
else:
for i in range(start, len(nums)):
# 交换nums[start]和nums[i]
nums[start], nums[i] = nums[i], nums[start]
# 递归调用permute生成全排列
permute(nums, start+1, prefix+[nums[start]])
# 交换回来
nums[start], nums[i] = nums[i], nums[start]
# 测试
result = []
nums = [1, 2, 3]
permute(nums)
print(result)
```
输出结果为:
```
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]
```
这就是生成整数的全排列的递归算法。
阅读全文