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

求遍历任意长度数组所有变体的算法,递归排列实现遇阻

数组全排列的递归实现方案

递归实现全排列的核心逻辑很直接:每次从剩余元素里选一个作为当前排列的下一个元素,然后递归处理剩下的元素,直到没有剩余元素时,就得到一个完整的排列。

实现思路

  1. 定义递归函数,参数包含当前已构建的排列和待处理的剩余元素
  2. 当剩余元素为空时,将当前排列存入结果集合
  3. 遍历剩余元素中的每一个:
    • 把当前元素加入已构建排列
    • 递归处理「剩余元素去掉当前元素」的新数组
    • 回溯:将当前元素从已构建排列中移除,继续处理下一个元素

代码示例(Python)

def permute(nums):
    result = []
    def backtrack(current, remaining):
        if not remaining:
            result.append(current.copy())
            return
        for i in range(len(remaining)):
            # 选择当前元素
            current.append(remaining[i])
            # 递归处理剩余元素(排除当前选中的)
            backtrack(current, remaining[:i] + remaining[i+1:])
            # 回溯,撤销选择
            current.pop()
    backtrack([], nums)
    return result

# 测试示例
arr = [1, 3, 5, 7]
all_permutations = permute(arr)
for p in all_permutations:
    print(p)

说明

  • 这段代码会输出输入数组的所有排列,比如输入[1,3,5,7]时,会包含你示例中的[1,3,7,5]、[1,5,3,7]等所有变体
  • 如果数组包含重复元素,比如[1,1,2],上面的代码会生成重复排列。要去重的话,可以在遍历剩余元素时,跳过和当前元素相同的已处理元素,比如加入判断if i > 0 and remaining[i] == remaining[i-1]: continue,不过前提是先对数组排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:15:23