个人网站简单,深圳品牌网站设计公司价格,成功的营销网站的例子,微商做网站网站Problem: 78. 子集 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路
我们易知#xff0c;本题目涉及到对元素的穷举#xff0c;即我们可以使用回溯来实现。对于本题目我们应该较为注重回溯中的决策阶段#xff1a; 由于涉及到对数组中元素的穷举#xff0c;即在每… Problem: 78. 子集 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路
我们易知本题目涉及到对元素的穷举即我们可以使用回溯来实现。对于本题目我们应该较为注重回溯中的决策阶段 由于涉及到对数组中元素的穷举即在每一决策阶段我们涉及到是否选择当前元素是否将当前决策阶段的元素添加到决策路径中即我们可以利用递归先将所有的不选择添加到决策路径的元素递完再在归的过程中继续递归选择添加到决策路径描述的可能比较模糊直接看决策树与代码更便于理解!!! 解题方法 1.定义成员变量result二维集合 2.调用并编写回溯函数从阶段0开始回溯实际上只是便于配合数组元素的下标索引为0 3.回溯函数 3.1当决策阶段假设为k等于题目所给的数组nums的长度时则将当前的决策路径添加到二维结果集result 3.2先递归所有不选择当前决策阶段元素再在归的过程中先添加当前决策阶段的元素到决策路径再继续递归选择当前决策阶段元素 3.3在递完选择当前决策阶段元素后需要删除当前决策路径中的最后一个元素 复杂度
时间复杂度: O ( n × 2 n ) O(n \times 2^n) O(n×2n) 空间复杂度: O ( n ) O(n) O(n) Code
class Solution {//Two-dimensional result setprivate ListListInteger result new ArrayList();/***Return all subsets* param nums Universal set* return ListListInteger*/public ListListInteger subsets(int[] nums) {backtrack(nums, 0, new ArrayListInteger());return result;}/*** Backtracking function is used to find all subsets* param nums Optional combination* param k Decision stage* param path Decision path*/private void backtrack(int[] nums, int k, ListInteger path) {if (k nums.length) {result.add(new ArrayList(path));return;}//Recursion that does not select the current decision stage elementbacktrack(nums, k 1, path);//Add the current decision stage element to decision stagepath.add(nums[k]);//Recursion which selects the current decision stage elementbacktrack(nums, k 1, path);//Remove the last element of current decision pathpath.remove(path.size() - 1);}
}