78.子集
阿新 • • 發佈:2020-08-20
題目描述
給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。
說明:解集不能包含重複的子集。
題解
這類題的通用解法就是回溯,回溯演算法的通用解法:
res=[]
def backtrack(nums,start,path)//(選擇列表,選擇開始位置,選擇的路徑)
if 滿足結束條件:
res.add(path)
return
for 選擇 in 選擇列表
選擇
backtrack(nums,start+1,path);
撤銷選擇
程式碼
- Java
class Solution { List<List<Integer>>res=new ArrayList<>(); public List<List<Integer>> subsets(int[] nums) { List<Integer> path=new ArrayList<>(); backtrace(0,path,nums); return res; } void backtrace(int start,List<Integer> path,int[] nums){ res.add(new ArrayList<>(path)); for(int i=start;i<nums.length;++i){ path.add(nums[i]); backtrace(i+1,path,nums); path.remove(path.size()-1); } } }
- C++
class Solution { public: vector<vector<int>> res; vector<vector<int>> subsets(vector<int>& nums) { vector<int>track; backtrack(nums,0,track); return res; } void backtrack(vector<int> nums, int start, vector<int> track) { res.push_back(track); for (int i = start; i < nums.size(); i++) { track.push_back(nums[i]); backtrack(nums, i + 1, track); track.pop_back(); } } };