和 http://blog.csdn.net/make_app/article/details/54708838 subset问题类似,这道题多了个限制,nums中的元素可以重复。
通过跑dfs发现,当他两个相邻重复的时候,并且是另外一个分支的时候,会出现重复的情况。
加上判断条件即可解决重复的问题:
if(i>start && nums[i]==nums[i-1]) continue;
另一种方法:位运算
Reference:
https://discuss.leetcode.com/topic/4661/c-solution-and-explanation/3
For example, if we have duplicate elements (5, 5), instead of treating them as two elements that are duplicate, we can treat it as one special element 5, but this element has more than two choices: you can either NOT put it into the subset, or put ONE 5 into the subset, or put TWO 5s into the subset