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

Java List<List<Integer>>生成全排列及类型不兼容报错解决咨询

问题原因梳理
  • 编译报错直接原因:java.util.List的add()方法返回值为boolean类型,用于标识元素是否添加成功,你的permute方法声明返回值为List<List<Integer>>,直接返回obj2.add(obj)的执行结果会出现类型不匹配问题。
  • 功能逻辑缺陷:现有代码仅将输入数组的元素存入单个列表,没有实现全排列的生成逻辑,无法输出所有排列组合的结果。
修复后完整代码

Main.java

public class Main
{
    public static void main(String[] args)
    {
        int[] nums = {1,2,3};
        Solution obj = new Solution();
        // 打印结果验证输出
        System.out.println(obj.permute(nums));
    }
}

Solution.java

import java.util.*;
class Solution {
    // 存储最终全排列结果
    List<List<Integer>> res = new ArrayList<>();
    // 标记元素是否已被使用
    boolean[] used;

    public List<List<Integer>> permute(int[] nums) {
        used = new boolean[nums.length];
        // 启动回溯,传入临时列表存储当前构造的排列
        backtrack(nums, new ArrayList<>());
        return res;
    }

    private void backtrack(int[] nums, List<Integer> tempList) {
        // 临时列表长度等于数组长度,说明已经构造完一个完整排列
        if (tempList.size() == nums.length) {
            // 要存临时列表的拷贝,避免后续回溯修改影响已存入的结果
            res.add(new ArrayList<>(tempList));
            return;
        }
        // 遍历所有元素,找未被使用的元素加入当前排列
        for (int i = 0; i < nums.length; i++) {
            if (used[i]) {
                continue;
            }
            // 标记当前元素已使用
            used[i] = true;
            tempList.add(nums[i]);
            // 递归构造下一个位置的元素
            backtrack(nums, tempList);
            // 回溯:撤销标记和元素添加,尝试其他可能
            tempList.remove(tempList.size() - 1);
            used[i] = false;
        }
    }
}
运行结果

执行Main类后会输出你期望的结果:

[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:45:07