zoukankan      html  css  js  c++  java
  • C#组合算法 (2)

       public static List<string> GetCom<T>(T[] aConde,int n)
           {
            List<string > list = new List<string>();
            int m =aConde.Length;
            int[] flags = new int[m];
            for (int i = 0; i < n; i++)
            {
                flags[i] = 1;
            }

            for (int i = n; i < m; i++)
            {
                flags[i] = 0;
            }

         
           string s = "";
            for (int i = 0; i < flags.Length; i++)
            {
                if (flags[i] == 1)
                {
                 
                    s += aConde[i].ToString()+",";
                }
             
            }
            if(s.Length>0 && s.EndsWith(","))
            {
                   s=s.Substring(0,s.Length-1);
            }
            list.Add(s);
         

        
            int count = 1;

            bool has10 = false; //是否有"10"组合的标志:true-有;false-无

            int bound = 0; //第一个"10"组合的索引

            int num1 = 0;           //"10"组合左边的"1"的个数
            int j;

            while (true)
            {
                num1 = 0;

                has10 = false;


                for (int i = 0; i < m - 1; i++)
                {
                    if (flags[i] == 1 && flags[i + 1] == 0)//找到第一个"10"组合
                    {

                        bound = i;

                        flags[i] = 0;//将该"10"组合变为"01"组合

                        flags[i + 1] = 1;

                        for (j = 0; j < num1; j++)//将其左边的所有"1"全部移动到数组的最左端
                        {

                            flags[j] = 1;

                        }

                        for (j = num1; j < bound; j++)
                        {

                            flags[j] = 0;

                        }

                        has10 = true;

                        break;

                    }

                    else if (flags[i] == 1)
                    {

                        num1++;

                    }
                   


                }
                if (has10 == false)//没有"10"组合了,代表组合计算完毕

                {
                    break;
                }
                else
                {
                    count++;
                }
                s = "";
                for (int i = 0; i < flags.Length; i++)
                {
                    if (flags[i] == 1)
                    {

                        s += aConde[i].ToString() + ",";
                    }

                }
                if (s.Length > 0 && s.EndsWith(","))
                {
                    s = s.Substring(0, s.Length - 1);
                }
                list.Add(s);
            }
            return list;
        }

  • 相关阅读:
    大白话解说,半分钟就懂 --- 分布式与集群是什么 ? 区别是什么?
    intellij idea中去除@Autowired注入对象的红色波浪线提示
    用JQuery获取事件源怎么写
    springBoot 配置url 访问图片
    地图服务 纬度、经度对应坐标轴x,y
    5个问题带你了解export和import的使用以及export和export defalut 的区别
    5个你可能不知道的html5语义化标签
    CSS选择器[attribute | = value] 和 [attribute ^ = value]的区别
    前端ps实用小技巧
    7步教你使用git命令上传本地代码至github仓库(小白向)
  • 原文地址:https://www.cnblogs.com/luluping/p/1498658.html
Copyright © 2011-2022 走看看