leetcode 78. Subsets-陣列子集|回溯演算法
【思路1-Java】回溯演算法|遞迴實現
本解法採用回溯演算法實現,回溯演算法的基本形式是“遞迴+迴圈”,正因為迴圈中巢狀著遞迴,遞迴中包含迴圈,這才使得回溯比一般的遞迴和單純的迴圈更難理解,其實我們熟悉了它的基本形式,就會覺得這樣的演算法難度也不是很大。原陣列中的每個元素有兩種狀態:存在和不存在。
① 外層迴圈逐一往中間集合 temp 中加入元素 nums[i],使這個元素處於存在狀態
② 開始遞迴,遞迴中攜帶加入新元素的 temp,並且下一次迴圈的起始是 i 元素的下一個,因而遞迴中更新 i 值為 i + 1
③ 將這個從中間集合 temp 中移除,使該元素處於不存在狀態
10 / 10 test cases passed. Runtime: 2 ms Your runtime beats 61.73% of javasubmissions.public class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> res = new ArrayList<List<Integer>>(); List<Integer> temp = new ArrayList<Integer>(); dfs(res, temp, nums, 0); return res; } private void dfs(List<List<Integer>> res, List<Integer> temp, int[] nums, int j) { res.add(new ArrayList<Integer>(temp)); for(int i = j; i < nums.length; i++) { temp.add(nums[i]); //① 加入 nums[i] dfs(res, temp, nums, i + 1); //② 遞迴 temp.remove(temp.size() - 1); //③ 移除 nums[i] } } }
【思路2-Java、Python】組合|非遞迴實現
這種方法是一種組合的方式
① 最外層迴圈逐一從 nums 陣列中取出每個元素 num
② 內層迴圈從原來的結果集中取出每個中間結果集,並向每個中間結果集中新增該 num 元素
③往每個中間結果集中加入 num
④將新的中間結果集加入結果集中
10 / 10 test cases passed. Runtime: 2 ms Your runtime beats 61.73% of javasubmissions.public class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> res = new ArrayList<List<Integer>>(); res.add(new ArrayList<Integer>()); for (int num : nums) { // ①從陣列中取出每個元素 int size = res.size(); for (int i = 0; i < size; i++) { List<Integer> temp = new ArrayList<>(res.get(i)); // ②逐一取出中間結果集 temp.add(num); // ③將 num 放入中間結果集 res.add(temp); // ④加入到結果集中 } } return res; } }
10 / 10 test cases passed. Runtime: 52 ms Your runtime beats 98.24% of pythonsubmissions.class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ res = [[]] for num in nums : for temp in res[:] : x = temp[:] x.append(num) res.append(x) return res
相關推薦
leetcode 78. Subsets-陣列子集|回溯演算法
【思路1-Java】回溯演算法|遞迴實現 本解法採用回溯演算法實現,回溯演算法的基本形式是“遞迴+迴圈”,正因為迴圈中巢狀著遞迴,遞迴中包含迴圈,這才使得回溯比一般的遞迴和單純的迴圈更難理解,其實我們熟悉了它的基本形式,就會覺得這樣的演算法難度也不是很大。原陣列中的每個元
LeetCode 78. Subsets--輸出一個一維陣列的所有子集
Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solution set must not contain duplicate su
遞迴-陣列的子集:leetcode 78 Subsets
public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> result = new ArrayList<List<Integer>>(
LeetCode 78. Subsets (子集)
原題 Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solution set must not contain duplicate subs
Leetcode 78. Subsets 子集 解題報告
1 解題思想 這道題需要求給定陣列的子集,特別要求有: 1、必須是升序 2、不能出現重複的 所以做法其實也就是,首先排序,然後回溯。。和昨天那題一樣,可以回去看一下。記得選擇下一個的時候,別和當前的值重複就可以了。 2 原題 Given a set
LeetCode 78. Subsets 20170606
range 遞歸 思路 length .com 相等 png leetcode pen Given a set of distinct integers, nums, return all possible subsets. Note: The solution set m
LeetCode 78: Subsets
nbsp rec rem clas col stream arr ger pri class Solution { public List<List<Integer>> subsets(int[] nums) { List&
[LeetCode] 78. Subsets 子集合
tinc ++i integer += pre distinct size_t sort contain Given a set of distinct integers, nums, return all possible subsets (the power set).
Leetcode 78. Subsets (backtracking) 90 subset
check emp rev ++ remove tin turn ins tracking using prev class Solution { List<List<Integer>> res = new ArrayList<Lis
[leetcode][78] Subsets
clas pre 就是 ack not ica 商業 con 迷宮 78. Subsets Given a set of distinct integers, nums, return all possible subsets (the power set). Note:
leetcode 78 Subsets
Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solution set must not contain dup
LeetCode--78. Subsets
題目連結:https://leetcode.com/problems/subsets/ 求集合的所有子集,數學上大小為n的集合有2^n個子集。用回溯法就能輕鬆解決!一如既往地模板套路:用一個全域性變數ret儲存所有子集合,用visited表示取或者不取某個陣列位置上的數,遞迴引數是當前待確定取還
Leetcode 78. Subsets
clas void ets medium 指數 com subset math [] 題目 鏈接:https://leetcode.com/problems/subsets/ Level: Medium Discription: Given a set of distin
leetcode 78 Subsets
78. Subsets 題目描述: Given a set of distinct integers, nums, return all possible subsets. Note: The solution set must not contain duplicate
leetcode 90 subsets-ii 子集II
class Solution { public: vector<vector<int>> subsetsWithDup(vector<int>& nu
19.2.15 [LeetCode 78] Subsets
pos cli must integer clas ssi out code b- Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The
【Leetcode】78. Subsets(求集合的子集問題)
構造 alt soft vat 題目 www. ack tco sub 78. Subsets(求集合的子集問題) 【分析】:求集合的所有子集問題。題目要求子集中元素非遞減序排列,因此我們先要對原來的集合進行排序。原集合中每一個元素在子集中有兩種狀態:要麽存在、要麽不存在
LeetCode 78 90 子集 子集II (回溯,遞迴)
1.子集 難度:中等 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。 說明:解集不能包含重複的子集。 示例: 輸入: nums = [1,2,3] 輸出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []
leetcode 遞歸回溯-78 Subsets(java) ;80 Subsets II
一、 題目分析: 這個和我之前跟著左程雲老師的牛客網初級班的最後一課,動態規劃那一課看到過差不多的題 那個是動態規劃之前的一個遞迴的使用,讓列印一個字串的全排列 跟這個題是一模一樣的,不一樣的是字串可以直接char[]chr=str.toCharArray() 和str=S
LeetCode:78. Subsets(找出一個數組中所有的子集)
Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solution set must not contain dup