zoukankan      html  css  js  c++  java
  • .net 重复组合算法(从集合中提取N个数,得到所有组合:单个数值可重复)

    算法很简答,就是迭代计算,得到所有组合就行了,废话不多说,直接上代码(看起来复杂,实现起来代码其实很简单)

    /// <summary>
    /// 从dataList中提取n个数,得到所有组合(数字可重复)
    /// </summary>
    /// <param name="dataList">数据集合</param>
    /// <param name="n">提取数字数量</param>
    /// <param name="value">默认为null,迭代时使用</param>
    /// <returns></returns>
     private static List<List<int>> GetCombinations(List<int> dataList, int n, List<int> value = null)
    {
        List<List<int>> result = new List<List<int>>();
        for (int i = 0, count = dataList.Count; i < count; i++)
        {
            List<int> itemList = new List<int>();
            if (value != null && value.Count > 0)
            {
                itemList.AddRange(value);
            }
            itemList.Add(dataList[i]);
    
            if (itemList.Count == n)
            {
                result.Add(itemList);
            }
            else
            {
                result.AddRange(GetCombinations(dataList, n, itemList));
            }
        }
        return result;
    }
    
    static void Main(string[] args)
    {
        List<int> IntArr = new List<int>() { 1, 2, 3, 4, 5 }; //整型数组
        List<List<int>> ListCombination = GetCombinations(IntArr, 3); //从中提取3个数,返回所有组合
        foreach (List<int> arr in ListCombination)
        {
            foreach (int item in arr)
            {
                Console.Write(item + " ");
            }
            Console.WriteLine("");
        }
        Console.ReadKey();
    }
    

      

  • 相关阅读:
    innerHTML和innerText的使用和区别
    HTML5的快捷方式
    JSP相关知识
    <<,>>(有符号位移)和>>>(无符号位移)的使用方法,及差别
    JDK环境变量配置
    在table中加入<hr />标签为什么横线会跑到上边?
    有关List、Set、Map的基础了解
    菜鸟级-正则表达式
    Git常用的基本操作
    Mysql基本操作
  • 原文地址:https://www.cnblogs.com/wanggang2016/p/13503216.html
Copyright © 2011-2022 走看看