本文共 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解题报告: