本文共 941 字,大约阅读时间需要 3 分钟。
我的LeetCode代码仓:
原题链接:
题目描述:
知识点:递归、回溯
本题和虽然题目不尽相同,但思路却是一模一样。
时间复杂度是O(2 ^ n),其中n为nums数组的长度。空间复杂度即递归深度,是O(n)。
JAVA代码:
public class Solution {    private List            > listList;    public List                  > subsets(int[] nums) {        listList = new ArrayList<>();        for (int i = 0; i <= nums.length; i++) {            subSets(nums, new ArrayList<>(), i);        }        return listList;    }    private void subSets(int[] nums, List                list, int n){        if(list.size() == n){            listList.add(new ArrayList<>(list));            return;        }        for (int i = 0; i < nums.length; i++) {            if(list.contains(nums[i]) || (!list.isEmpty() && list.get(list.size() - 1) > nums[i])){                continue;            }            list.add(nums[i]);            subSets(nums, list, n);            list.remove(list.size() - 1);        }    }}                    
    
   LeetCode解题报告: