You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过交换元素位置生成数组的所有可能排列组合

数组全排列实现方案

方案1:使用Python标准库直接实现(最简单高效)

Python的itertools模块内置了全排列生成方法permutations,可以直接满足需求,代码如下:

import itertools

def get_all_permutations(arr):
    # permutations返回元组迭代器,转换为列表即可
    return [list(item) for item in itertools.permutations(arr)]

# 测试
origin = [10,5,3,6]
all_perms = get_all_permutations(origin)
for perm in all_perms:
    print(perm)

这个方法会生成所有不重复的位置排列,长度为n的数组会生成n!个结果,4个元素的数组刚好生成24种排列,和你示例的输出数量一致。

方案2:手动实现交换回溯的全排列逻辑

如果你需要自己通过交换元素位置的逻辑实现,不依赖第三方库,可以用回溯算法实现,思路是:

  • 逐层固定数组第index位的元素
  • 每次将index位和后续所有位置的元素逐一交换
  • 递归处理index+1位的排列
  • 递归返回后把元素交换回来(回溯),避免影响后续分支
    代码实现如下:
def generate_permutations(arr, index, result):
    # 递归终止条件:已经处理到最后一位,当前数组就是一个有效排列
    if index == len(arr) - 1:
        result.append(arr.copy())
        return
    # 遍历当前位置之后的所有元素,逐一和当前位置交换
    for i in range(index, len(arr)):
        # 交换当前位置和i位置的元素
        arr[index], arr[i] = arr[i], arr[index]
        # 递归处理下一个位置
        generate_permutations(arr, index + 1, result)
        # 回溯:交换回来,恢复原数组状态
        arr[index], arr[i] = arr[i], arr[index]

# 测试
origin = [10,5,3,6]
result = []
generate_permutations(origin, 0, result)
for perm in result:
    print(perm)

原有代码问题说明

你之前写的rotateArray仅实现了数组的循环移位,长度为n的数组最多只能生成n种不同的排列结果,而全排列需要覆盖所有元素位置交换的可能,总共有n!种,所以无法满足需求。

内容的提问来源于stack exchange,提问作者Wing Shum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:15:04