public arraylist a(ArrayList al, int num )
{}
比如这个方法,我传入一个 arrayList 和 num al 里面是一个int 数组
num 表示从al里取几个数字,要求不重复的组合。返回的是 有多少个符合条件的数组

解决方案 »

  1.   

    补充: 
    比如: 
    Al={1,2,3,4,5,6}
    num=3就是从 al 中组合
    123,124,125,126,134…… 类似这样
      

  2.   

    public List<int> a(System.Collections.ArrayList al, int num)
            {
                //去掉重复值
                List<int> list = new List<int>();
                for (int i = 0; i < al.Count; i++)
                {
                    if(!list.Contains((int)al[i]))
                        list.Add((int)al[i]);
                }            //先进行判断,以减少运算
                if (num > list.Count)
                    return list;            List<int> ret = new List<int>();
                for (int i = 0; i < num; i++)
                { 
                    Random r = new Random(1);
                    int value = r.Next(list.Count);
                    if (ret.Contains(list[value]))
                    {
                        while (true)
                        {
                            value = r.Next(1, 101);
                            if (!ret.Contains(list[value]))
                            {
                                ret.Add(list[value]);
                                break;
                            }
                        }
                    }
                    else
                    {
                        ret.Add(value);
                    }
                }        }
      

  3.   

     /// <summary>
            /// 组合
            /// </summary>
            /// <param name="al">int列表集合</param>
            /// <param name="num">组合数</param>
            private IList<string> Combination(ArrayList al, int num)
            {
                IList<string> list = new List<string>();
                IList<string> cbList = new List<string>();
                //删除重复值
                for (int i = 0; i < al.Count; i++)
                {
                    if (!list.Contains<string>(al[i].ToString()))
                    {
                        list.Add(al[i].ToString());
                    }
                }
                if (list.Count < num)
                {
                    return null;
                }
                else
                {
                    if (num > 1)
                    {
                        //递归组合
                        for (int i = 0; i < list.Count; i++)
                        {
                            cbList = cbList.Union<string>(Combination(list[i], list, num)).ToList<string>();
                        }
                    }
                    else
                    {
                        cbList = list;
                    }
                    return cbList;
                }
            }        /// <summary>
            /// 组合数据
            /// </summary>
            /// <param name="a">要进行组合的数</param>
            /// <param name="list">可与a进行组合的列表</param>
            /// <param name="num">组合长度</param>
            /// <returns>组合结果</returns>
            private IList<string> Combination(string a, IList<string> list, int num)
            {
                IList<string> cbList = new List<string>();
                for (int i = 0; i < list.Count; i++)
                {
                    //判断a中是否包含list[i],若为包含则将其与a组合
                    if (!a.Contains(list[i]))
                    {
                        cbList.Add(a + list[i]);
                    }
                }
                //判断组合后的长度是否等于num,若小于num则继续进行递归组合
                if (cbList.Count > 0 && cbList[0].Length < num)
                {
                    IList<string> comList = new List<string>();
                    //遍历已组合的集合,继续进行组合
                    for (int i = 0; i < cbList.Count; i++)
                    {
                        comList = comList.Union<string>(Combination(cbList[i], list, num)).ToList<string>();
                    }
                    return comList;
                }
                else
                {
                    return cbList;
                }
            }