![在这里插入图片描述](https://img-blog.csdnimg.cn/20200920083750897.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01hc29uOTc=,size_16,color_FFFFFF,t_70#pic_center)
用动态规划:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200920083825673.png#pic_center)
class Solution {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.subsets(new int[]{
1, 2, 3}));
}
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new LinkedList<>();
LinkedList<Integer> tmp = new LinkedList<>();
res.add(tmp);
dp(nums, 0, res, nums.length);
return res;
}
private void dp(int[] nums, int i, List<List<Integer>> res, int len) {
if(i==len) return;
int x = nums[i];
int size = res.size();
for (int j = 0; j < size; j++) {
List<Integer> tmp = res.get(j);
LinkedList<Integer> newList = new LinkedList<>(tmp);
newList.add(x);
res.add(newList);
}
dp(nums,i+1,res,len);
}
}
用深度优先遍历,搜索回溯
class Solution {
List<List<Integer>> res = new LinkedList<>();
List<Integer> tmp = new LinkedList<>();
public List<List<Integer>> subsets(int[] nums) {
dfs(nums, 0);
return res;
}
private void dfs(int[] nums, int i) {
if (i == nums.length) {
res.add(new LinkedList<>(tmp));
return;
}
dfs(nums, i + 1);
tmp.add(nums[i]);
dfs(nums, i + 1);
tmp.remove(tmp.size() - 1);
}
}