(lintcode)第18题 带重复元素的子集

要求:

给定一个可能具有重复数字的列表,返回其所有可能的子集

 注意事项
  • 子集中的每个元素都是非降序的
  • 两个子集间的顺序是无关紧要的
  • 解集中不能包含重复子集
样例

如果 S = [1,2,2],一个可能的答案为:

[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]
思路:可以看这篇http://blog.csdn.net/aphysia/article/details/77849042,只是更改一部分,取出list的循环控制条件是改成为列表的大小,然后加入的时候,要判断列表里面是不是已经含有这个元素,要是已经有,则不加进去,否则,要加进去。代码如下:
public class Solution {
    /*
     * @param nums: A set of numbers.
     * @return: A list of lists. All valid subsets.
     */
    public List> subsetsWithDup(int[] nums) {
        ArrayList> res=new ArrayList>();
        ArrayListlist=new ArrayList();
        if(nums==null ){
            return res;
        }
        res.add(list);
        Arrays.sort(nums);
        for(int i=0;itemp=res.get(0);
                res.remove(0);
                ArrayListtemp2=new ArrayList(temp);
                temp2.add(temp2.size(),nums[i]);
                if(!res.contains(temp2))
                    res.add(temp2);
                if(!res.contains(temp))
                    res.add(temp);
            }
        }
        return res;
    
    }
}


你可能感兴趣的:(java,算法,lintcode)