给定一个含 nn1个整数元素的a所有元素都不相同采用蛮力法求出a 中所有元素的全排列。
蛮力法(也称暴力枚举法)是一种简单直接的算法,但时间复杂度较高,适用于数据规模较小的情况。对于全排列问题,蛮力法的思路是从头到尾枚举每个位置上应该放哪个数,直到所有位置都填满为止。
具体实现步骤如下:
- 定义一个列表 res 保存结果,初始化为空列表。
- 编写一个递归函数 permute,该函数接受两个参数:当前正在处理第 i 个位置,以及剩余未使用的数字集合。在 permute 函数中,如果当前处理的位置 i 大于等于数组长度 n,则将当前排列加入结果列表 res 中。否则,枚举剩余数字集合中的每个数字 num,将其放到当前位置 i 上,递归调用 permute 函数处理下一个位置 i+1,并将 num 从剩余数字集合中删除。处理完下一个位置后,将 num 放回剩余数字集合中,以便尝试下一个数字。
- 调用 permute 函数,将当前处理位置设为 0,剩余数字集合为原始数组 a。
- 返回结果列表 res。
Python 实现代码如下:
def permute(i, nums, res):
if i >= len(nums):
res.append(nums[:])
else:
for j in range(i, len(nums)):
nums[i], nums[j] = nums[j], nums[i]
permute(i+1, nums, res)
nums[i], nums[j] = nums[j], nums[i]
def permutation(a):
res = []
permute(0, a, res)
return res
测试代码如下:
a = [1, 2, 3]
print(permutation(a)) # [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]
原文地址: https://www.cveoy.top/t/topic/bTj6 著作权归作者所有。请勿转载和采集!