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

      

  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/wanggang2016/p/13503216.html
Copyright © 2011-2022 走看看