java
class Solution {
List<Integer> t = new ArrayList<Integer>();
List<List<Integer>> ans = new ArrayList<List<Integer>>();
public List<List<Integer>> subsets(int[] nums) {
dfs(0, nums);
return ans;
}
public void dfs(int cur, int[] nums) {
if (cur == nums.length) {
ans.add(new ArrayList<Integer>(t));
return;
}
t.add(nums[cur]);
dfs(cur + 1, nums);
t.remove(t.size() - 1);
dfs(cur + 1, nums);
}
}
使用回溯求解
cur代表的意思是处理nums[cur]这个数字
t.add和t.remove代表 当前的数字被选择和不被选择
以nums[] = {1,2,3}为例
求解过程就是
java
选1选2选3
选1选2不选3
选1不选2选3
选1不选2不选3
不选1选2选3
不选1选2不选3
不选1不选2选3
不选1不选2不选3