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

如何生成任意长度无重复数组的全排列,要求无重复元素且长度与原数组一致

无重复数组全排列实现方案

核心思路

使用回溯法实现,逻辑如下:

  • 逐层固定数组当前索引位的元素,递归处理后续索引位的排列
  • 递归到数组末尾时,记录当前排列结果
  • 递归返回后回溯交换元素,复位状态用于生成其他排列
    因为原数组本身无重复元素,该逻辑生成的所有排列天然不存在重复元素,且长度与原数组完全一致,不会产生非法结果。

Java 实现代码

import java.util.ArrayList;
import java.util.List;

public class PermutationGenerator {
    public List<String> generateAllCombinations(String[] list) {
        List<String> result = new ArrayList<>();
        backtrack(list, 0, result);
        return result;
    }

    private void backtrack(String[] list, int currentIndex, List<String> result) {
        // 递归终止条件:当前索引等于数组长度,说明已生成一个完整排列
        if (currentIndex == list.length) {
            StringBuilder sb = new StringBuilder();
            for (String s : list) {
                sb.append(s);
            }
            result.add(sb.toString());
            return;
        }
        for (int i = currentIndex; i < list.length; i++) {
            // 交换当前位和i位元素,固定currentIndex位置的元素为list[i]
            swap(list, currentIndex, i);
            // 递归处理下一位
            backtrack(list, currentIndex + 1, result);
            // 回溯,交换回原位置
            swap(list, currentIndex, i);
        }
    }

    private void swap(String[] list, int a, int b) {
        String temp = list[a];
        list[a] = list[b];
        list[b] = temp;
    }

    // 测试示例
    public static void main(String[] args) {
        PermutationGenerator generator = new PermutationGenerator();
        String[] list = {"A", "B", "C"};
        List<String> permutations = generator.generateAllCombinations(list);
        for (String p : permutations) {
            System.out.println(p);
        }
    }
}

运行结果

输入String[] list = {"A","B","C"}运行后输出如下:

ABC
ACB
BAC
BCA
CAB
CBA

复杂度说明

  • 时间复杂度:O(n!),n为数组长度,共生成n!个排列,每个排列需要O(n)时间拼接字符串
  • 空间复杂度:O(n),递归栈深度为n,无额外辅助存储空间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:45:03