[LeetCode]Subsets

发表于
0

题目传送门

题目描述:给定一个元素互不重复的整数数组,要求你返回这个数组的所有子集(即幂集),其中结果中不能包含重复子集,并且返回顺序可以任意

完整代码:

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        subsets(result, nums, 0, new ArrayList<>());
        return result;
    }

    private void subsets(List<List<Integer>> result, int[] nums, int index, List<Integer> lastArray) {
        result.add(new ArrayList<>(lastArray));
        for (int i = index; i < nums.length; i++) {
            lastArray.add(nums[i]);
            subsets(result, nums, i + 1, lastArray);
            lastArray.removeLast();
        }
    }
}

代码思路:通过回溯算法生成所有子集:从空集合开始,用一个临时列表记录当前子集,每次递归都先将当前子集加入结果,然后从当前位置开始遍历数组,依次选择元素加入子集并递归处理后续元素,递归结束后再撤销选择(回溯),继续尝试其他可能,从而枚举出所有不重复的子集。


0
上一篇 [LeetCode]n-queens