NC221. 集合的所有子集(二)
描述
示例1
输入:
[1,2]
输出:
[[],[1],[1,2],[2]]
示例2
输入:
[1]
输出:
[[],[1]]
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-05-06
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector<vector<>> */ vector<vector<int>> res; vector<int> temp; void dfs(vector<int>& nums, vector<int>& visited, int nStart) { res.push_back(temp); for(int i = nStart; i < nums.size(); i++) { if(i > 0 && nums[i] == nums[i-1] && !visited[i-1]) continue; visited[i] = 1; temp.push_back(nums[i]); dfs(nums, visited, i+1); temp.pop_back(); visited[i] = 0; } } vector<vector<int> > subsets(vector<int>& nums) { vector<int> visited(10,0); sort(nums.begin(), nums.end()); dfs(nums, visited, 0); return res; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-03-10
class Solution { public: vector<vector<int>> res; int vis[15]={0}; vector<vector<int>> subsets(vector<int>& nums) { sort(nums.begin(),nums.end());//排序 vector<int> v; dfs(nums,0,v);//递归 return res; } void dfs(vector<int>& nums,int st,vector<int> &v){ res.push_back(v);//加入结果二维数组 int n=nums.size(); for(int i=st;i<n;i++){ if(i>0&&nums[i]==nums[i-1]&&vis[i-1]==0)//剪枝 continue; v.push_back(nums[i]); vis[i]=1; dfs(nums,i+1,v);//递归回溯 v.pop_back(); vis[i]=0; } } };
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-03-10
class Solution { private: vector<int> path; vector<vector<int>> res; public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector<vector<>> */ vector<vector<int> > subsets(vector<int>& nums) { // write code here sort(nums.begin(), nums.end()); vector<int> vis(nums.size(), 0); dfs(nums, vis, 0); return res; } void dfs(vector<int>& nums, vector<int>& vis, int cur_pos){ res.push_back(path); for(int i=cur_pos; i<nums.size(); i++){ if(i>0 && nums[i] == nums[i-1] && vis[i-1] == 0){ continue; } path.push_back(nums[i]); vis[i] = 1; dfs(nums, vis, i+1); path.pop_back(); vis[i] = 0; } } };
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-03-06
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector<vector<>> */ void backtracking(vector<int>&nums,vector<vector<int>>& ans,vector<int>&mid,vector<int>& used,int level){ ans.push_back(mid); for(int i=level;i<nums.size();++i){ if(used[i]==1){ continue; } if(i>0&&nums[i]==nums[i-1]&&used[i-1]==0){ continue; } mid.push_back(nums[i]); used[i]=1; backtracking(nums, ans, mid,used,i+1); mid.pop_back(); used[i]=0; } } vector<vector<int> > subsets(vector<int>& nums) { // write code here int n=nums.size(); vector<vector<int>> ans; vector<int> mid; vector<int> used(n); sort(nums.begin(),nums.end()); backtracking(nums, ans, mid,used,0); return ans; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-03-04
// class Solution { // public: // /** // * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 // * // * // * @param nums int整型vector // * @return int整型vector<vector<>> // */ // vector<vector<int> > subsets(vector<int>& nums) { // // write code here // set<int> unique; // for(int i = 0 ; i < nums.size(); i ++ ){ // unique.insert(nums[i]); // } // // // vector<vector<int> > res_final; // int i = 0; // int limit = pow(2, unique.size()); // while(i < limit){ // // // int cur = i; // vector<int> res; // for(auto it = unique.begin() ; it != unique.end() && cur > 0; it ++ ){ // if(cur & 0x01 != 0){ // res.push_back(*it); // } // cur = cur >> 1; // } // i ++ ; // res_final.push_back(res); // } // return res_final; // } // }; class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector<vector<>> */ vector<vector<int> > res; void back_trace(vector<int> unique, int cur_pos, vector<int> cur_set){ res.push_back(cur_set); for(auto i = cur_pos; i < unique.size(); i ++ ){ if(i > cur_pos && unique[i - 1] == unique[i]){ continue; } cur_set.push_back(unique[i]); back_trace(unique, i + 1, cur_set); cur_set.pop_back(); } } vector<vector<int> > subsets(vector<int>& nums) { // write code here sort(nums.begin(), nums.end()); // set<int> unique; // for(int i = 0 ; i < nums.size(); i ++ ){ // unique.insert(nums[i]); // } // // // vector<int> unique_vec; // for(auto it = unique.begin(); it != unique.end(); it ++ ){ // unique_vec.push_back(*it); // } vector<int> tmp; back_trace(nums, 0, tmp); return res; } };