面的做法

2022-12-21 美食烹饪 298056次阅读 ღ乱把白云揉碎࿐
最佳答案,可以用更多的空间来存储结果+class Solution {+ public List> subsets(int[] nums) {+ List> res = n..
面的做法
,可以用更多的空间来存储结果
+class Solution {
+ public List> subsets(int[] nums) {
+ List> res = new ArrayList<>();
+ if (nums == null || nums.length == 0) return res;
+ //用数组来存储有哪些元素被选中,长度为nums的长度,初始都为false,表示没有被选中
+ boolean[] visited = new boolean[nums.length];
+ dfs(res, nums, visited, 0); //从第0个元素开始尝试加入集合中或者不加入集合中
+ return res;
+ }
+ private void dfs(List> res, int[] nums, boolean[] visited , int curIndex){ //curIndex表明当前正在处理哪一个元素,即要考虑将nums[curIndex]是否加入子集 合
+ if (curIndex == nums.length){ //如果已处理完所有的元素,则将visited中标记为true的那些位对应的元素加到子集合res中
+ List list = new ArrayList<>(); //新建一个list来存储这一轮递归得到的子集合
§§ --- 78_subsets/Solution.java
- for (int i=0;i < len; i++){ //遍历visited ,如果相应位上标志位true,则将对应nums里面的数字加到list里面去 如此就得出了一个子集合 加进res里面去 然后return回去 等待上一层for loop 把另外一半也加进res里面去 这样就实现了dfs 的思想 遍历所有可能性 最后return出来 搞定subsets 具体看代法注释 注意: 这里是要考虑所有可能性!!包括null set也是可能性之一 !!! 注意for loop 的写法 注意dfs 里面return 的写法 边界条件在开始时就已写好 大体思想是dfs + for loop + visited array 很好理解 本代法时间复杂度O(2^len) 空间复杂O(len) len表明nums数组的大小 len=0时特例要考虑 Runtime: 1 ms , faster than 99.90% of Java online submissions for Subsets. Memory Usage: 39 MB , less than 5.02% of Java online submissions for Subsets. */                 //作者:Minghao_Wu                                                                                                                 //时间:June 11th 2020                   //Leetcode 78 Subsets                                 //Link : https://leetcode-cn.com/problems/subsets/                                                                                    //Finished!                                                               
                 
  for (int i=0;i < visited.length ;i++){ if (visited[i]){ list.add(nums[i]); } } res . add (list); return ; } else { /*如果当前还没有遍历完所有的数字*/ /*1、不将当前数字加入子集*/ dfs (res , nums , visited , curIndex + 1 ); /*2、将当前数字加入子集*/ visited [curIndex] = true ; dfs (res , nums , visited , curIndex + 1 ); /*3、回溯*/     visited [curIndex] = false ; }}}}}]]]]]]]]]]]]]]]]]]
猜你感兴趣