首页 > 解决方案 > 回溯算法 | 数组的子集:数组如何删除元素?

问题描述

下面的代码是找出数组的所有子集。这个解决方案使用的是回溯算法。但是我对这个解决方案有点困惑。当 tempList 为 [1,2,3] i = 3 时,调用结束。所以 tempList 变成 [1,2] 我的问题是 tempLits 如何变成1?我画了一张关于我的问题的照片,红线是我感到困惑的地方。谁能帮我这个?任何帮助,将不胜感激!在此先感谢。(我已经调试了这段代码,我仍然无法解决我的问题)

public static List<List<Integer>> subsets(int[] nums) {
    List<List<Integer>> list = new ArrayList<>();
    Arrays.sort(nums);
    backtrack(list, new ArrayList<>(), nums, 0);
    return list;
}

private static void backtrack(List<List<Integer>> list, List<Integer> tempList, int[] nums, int start) {
    list.add(new ArrayList<>(tempList));
    for (int i = start; i < nums.length; i++) {
        tempList.add(nums[i]);
        backtrack(list, tempList, nums, i + 1);
        tempList.remove(tempList.size() - 1);
    }
} 

在此处输入图像描述

标签: javaalgorithmbacktracking

解决方案


推荐阅读