[LeetCode]Subsets
题目描述:给定一个元素互不重复的整数数组,要求你返回这个数组的所有子集(即幂集),其中结果中不能包含重复子集,并且返回顺序可以任意。
完整代码:
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