老汉技术专栏

Java开发程序猿一枚~欢迎各位批评指正

LintCode 18. 带重复元素的子集

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


public class Solution {
    /**
     * @param nums: A set of numbers.
     * @return: A list of lists. All valid subsets.
     */
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        // write your code here
        List<List<Integer>> list = new ArrayList<>();
        if (nums == null) {
            return null;
        }
        Arrays.sort(nums);
        List<Integer> tmplist = new ArrayList<>();
        int[] visited = new int[nums.length];
        for (int i = 0; i < visited.length; i++) {
            visited[i] = 0;
        }
        for (int i = 0; i <= nums.length; i++) {
            tmplist.clear();
            DFS(list, tmplist, nums, i, 0, visited);
        }
        return list;
    }

    private void DFS (List<List<Integer>> list, List<Integer> tmplist, int[] nums, int size, int start, int[] visited) {
        if (tmplist.size() == size && !list.contains(tmplist)) {
            list.add(new ArrayList<>(tmplist));
            return;
        }
        for (int i = start; i < nums.length; i++) {
            tmplist.add(nums[i]);
            visited[i] = 1;
            DFS(list, tmplist, nums, size, i+1, visited);
            visited[i] = 0;
            tmplist.remove(tmplist.size() - 1);
        }
    }
}

阅读更多
文章标签: java lintcode
个人分类: java开发
相关热词: lintcode
上一篇LintCode 17. 子集
下一篇LintCode 20. 骰子求和
想对作者说点什么? 我来说一句

lintcode算法分析和解答

2017年07月26日 13.93MB 下载

java 去除重复元素

2010年06月18日 118KB 下载

重复元素的排列问题

2016年04月05日 858B 下载

回溯法求解子集和问题

2016年12月26日 3.34MB 下载

用C/C++编写的子集和数问题

2010年01月02日 1KB 下载

子集和问题(算法设计,acm)

2009年03月18日 2KB 下载

SQL用于查询子集集合

2014年08月06日 107B 下载

子集和数 C语言求解

2009年05月27日 169KB 下载

没有更多推荐了,返回首页

关闭
关闭