题目
给你一个整数数组 nums
,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
解题思路
递归+回溯。对于每一个元素选择拿与不拿,Java传递的是引用,添加元素递归后还得删除。
代码
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
dfs(ans, new ArrayList<Integer>(), 0, nums);
return ans;
}
private void dfs(List<List<Integer>> ans, ArrayList<Integer> now, int pos, int[] nums) {
if (pos == nums.length) {
ans.add(new ArrayList<>(now));
return;
}
dfs(ans, now, pos + 1, nums);
now.add(nums[pos]);
dfs(ans, now, pos + 1, nums);
now.remove(now.size() - 1);
}
}