classSolution {// memorize the solutionpublicList<List<Integer>> subsets(int[] nums) {List<List<Integer>> res =newArrayList<>();dfs(nums,newArrayList<>(), res,0);return res; }// start is used to prevent duplication: // only the numbers behind the start can be added to the listprivatevoiddfs(int[] nums,List<Integer> subset,List<List<Integer>> res,int start){// add the list come from previous recursionres.add(newArrayList<>(subset));for (int i = start; i<nums.length; i++){subset.add(nums[i]);// remember the start = i+1 in next recursiondfs(nums, subset, res, i+1);subset.remove(subset.size()-1); } } }