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();
    }
    

      

  • 相关阅读:
    构造函数详解
    左值和左值引用、右值和右值引用
    Lambda函数
    std::thread详解
    运算符重载
    友元函数和友元类
    xadmin list_filter 外键数据不显示
    中缀表达式转后缀表达式
    Centos 7 minimal 联网
    python 运用三目判断对象中多个属性 有且非空
  • 原文地址:https://www.cnblogs.com/wanggang2016/p/13503216.html
Copyright © 2011-2022 走看看