补充: 比如: Al={1,2,3,4,5,6} num=3就是从 al 中组合 123,124,125,126,134…… 类似这样
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); } } }
/// <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; } }
比如:
Al={1,2,3,4,5,6}
num=3就是从 al 中组合
123,124,125,126,134…… 类似这样
{
//去掉重复值
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);
}
} }
/// 组合
/// </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;
}
}