import java.util.*; public class Solution { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); ArrayList<Integer> track = new ArrayList<>(); public ArrayList<ArrayList<Integer>> subsets (int[] nums) { Arrays.sort(nums); backtrack(0,nums); return res; } private void backtrack(int start,int[] nums){ res.add(new ArrayList<>(track)); for(int i = start;i<nums.length;i++){ if(i > start && nums[i] == nums[i-1]) continue; track.add(nums[i]); backtrack(i+1,nums); track.remove(track.size()-1); } } }