• 77. Combinations (java 求C(n,k)的组合,排除重复元素)


    题目:

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

    解析:求全部组合的过程一样,只是这里限制每个组合中元素的个数为k,求所有组合时并不限制元素个数。

              若要排除重复的元素,则首先对所有元素进行排序。

    代码:

       public static List<List<Integer>> getAllCombinations(int[] array,int k){
                Arrays.sort(array); //排序,为了在接下来求组合时排除重复组合
                List<List<Integer>> list = new ArrayList<List<Integer>>();
                List<Integer> item = new ArrayList<Integer>();
                dfs_repeated(list, item, 0, array, k);
                return list;
        }
        /**
         * 存在重复元素,解决方法参考subsetsII
         * 求子集的算法同求重复元素的算法原理是相同的!
         * 首先对数组元素进行排序
         * {1,2,2}的所有组合有 1,2,12,122
         */
        public static void dfs_repeated(List<List<Integer>> list, List<Integer> item, int start, int[] array,int k){
      
            if(item.size() == k)
                list.add(new ArrayList<Integer>(item));
            int i = start;
            while(i < array.length){
                item.add(array[i]);
                dfs_repeated(list, item, i + 1, array, k);
                item.remove(item.size() - 1);
                i++;
                //排除重复的元素,直到找到一个不重复的元素时再添加
                while(i < array.length && array[i] == array[i - 1])
                    i++;
            }
        }
  • 相关阅读:
    Ocelot网关
    .Net Configuration配置优先级问题
    FilterContext/HttpContext 获取请求参数
    关于.Net的文件上传问题
    Notion+Zetero文献同步配置
    PyTorch训练模版
    marked ASP.NET 页面对象模型
    转:jQuery设计思想
    tryParse, try/catch(Parse), Convert比较
    CSS3 :nthchild()伪类选择器
  • 原文地址:https://www.cnblogs.com/mydesky2012/p/5768230.html
Copyright © 2020-2023  润新知