网站域名一年大概多少,公司网站建设哪里实惠,免费的wordpress空间,php门户网站模板下载不知道为什么看到这道题就很头痛……
其实只要掌握nums不包含重复元素的情况下的代码就行了。
若nums不能包含重复元素#xff0c;那么使用回溯很容易就能写出来#xff1a;
class Solution {void hs(vectorint v,int x,vectorint r,vectorvector…
不知道为什么看到这道题就很头痛……
其实只要掌握nums不包含重复元素的情况下的代码就行了。
若nums不能包含重复元素那么使用回溯很容易就能写出来
class Solution {void hs(vectorint v,int x,vectorint r,vectorvectorint result){if(xv.size()){result.push_back(r);r.clear();return ;}r.push_back(v[x]);hs(v,x1,r,result);r.pop_back();hs(v,x1,r,result);}
public:vectorvectorint subsetsWithDup(vectorint nums) {vectorint r;vectorvectorint result;hs(nums,0,r,result);return result;}
};
一开始我在回溯的函数里鬼使神差写了一个循环导致结果多出一大堆……以后可千万不能犯这样的低级错误了…………
接着就是考虑nums中能有重复元素的情况这种情况下若重复元素上一个相同元素没有选上那么以后的这个元素也不能选知道这个原理就可以将nums排序让重复元素互相挨着每次不选上一个元素若下一个元素还是这个元素就跳过不取。
class Solution {void hs(vectorint v,int x,vectorint r,vectorvectorint result){if(xv.size()){result.push_back(r);r.clear();return ;}r.push_back(v[x]);hs(v,x1,r,result);r.pop_back();for(int ix;iv.size()-1;i){if(v[x]v[x1]) x;}hs(v,x1,r,result);}
public:vectorvectorint subsetsWithDup(vectorint nums) {vectorint r;vectorvectorint result;sort(nums.begin(),nums.end());hs(nums,0,r,result);return result;}
};