1. public List<List<Integer>> subsets(int[] nums) {
    2. List<List<Integer>> ans = new ArrayList<>();
    3. generate(0, nums, ans, new ArrayList<>());
    4. return ans;
    5. }
    6. private void generate(int level, int[] nums, List<List<Integer>> ans, List<Integer> tempList) {
    7. if (level == nums.length) {
    8. // why not tempList? tempList local value
    9. ans.add(new ArrayList<>(tempList));
    10. return;
    11. }
    12. tempList.add(nums[level]);
    13. generate(level + 1, nums, ans, tempList);
    14. tempList.remove(tempList.size() - 1);
    15. generate(level + 1, nums, ans, tempList);
    16. }