See More

public class Solution { public List> subsets(int[] nums) { List> res = new ArrayList>(); if(nums == null) return res; res.add(new ArrayList()); for(int i = 0; i < nums.length; i++){ int size = res.size(); for(int j = 0; j < size; j++){ List copy = new ArrayList(res.get(j)); copy.add(nums[i]); res.add(copy); } } return res; } } public class Solution { public List> subsets(int[] nums) { List> res = new ArrayList>(); List list = new ArrayList(); dfs(nums, 0, res, list); return res; } public void dfs(int[] nums, int pos, List> res, List list){ res.add(new ArrayList(list)); for(int i = pos; i < nums.length; i++){ list.add(nums[i]); dfs(nums, i+1, res, list); list.remove(list.size()-1); } } }