多个数组全排列问题
来源:互联网 发布:六年级体测数据 编辑:程序博客网 时间:2024/06/05 18:14
多个数组全排列问题:多个数组,
int[] A={1,2,3};
int[] B={4,5};
int[] C={5,6};
......
int[] N={1,2};
N个数组,每个数组中取一个元素,进行全排列。
我写了一个下标进位制的算法,分享给大家,
首先,需要把这N个数组的长度组成新的数组,int[] Counts={A.Length,B.Length,C.Length,....,N.Length}
数组有了后就可以用下面的方法 迭代返回所有排列的索引, 根据索引取对应数组的该索引的元素
static IEnumerator GetQuanPaiLie(int[] Counts)
{int[] nums = new int[Counts.Length];
for (int x = 0; x < Counts.Length; x++)
{
nums[x] = Counts[x] > 0 ? 0 : -1;
}
int last = Counts.Length - 1;
while (nums[0] < Counts[0])
{
yield return nums;
nums[last]++;
for (int i = Counts.Length - 1; i > 0; i--)
{
if (nums[i] >= Counts[i])
{
nums[i] = 0;
nums[i - 1]++;
if (nums[0] > Counts[0])
{
break;
}
}
else
{
break;
}
}
}
}
调用方法
static void Main(string[] args)
{
int[] Counts = { 3, 1, 3 };
var a = GetQuanPaiLie(Counts);//
using (a as IDisposable)
{
while (a.MoveNext())
{
int[] b = (int[])a.Current;
for (int i = 0; i < b.Length; i++)
{
Console.Write(b[i]);
if (i % Counts.Length == Counts.Length - 1)
{
Console.WriteLine(";");
}
}
}
}
Console.ReadLine();
}
个人原创,转载请注明……
- 多个数组全排列问题
- 数组全排列问题
- int数组全排列问题
- 数组的全排列问题
- 多个数组全组合的问题
- 解答一个数组全排列的问题
- 字符串、数组的全排列问题
- 递归求解字符数组全排列问题
- 数组的全排列
- java数组全排列
- 数组的全排列
- 全排列(数组)
- 数组的全排列
- 数组的全排列
- 数组全排列
- 数组全排列
- 数组的全排列
- 数组全排列
- 应聘嵌入式软件工程师
- iPhone开发之NSRunLoop的进一步理解
- Hidden Secret Codes for Google Android Mobile Phones
- 聚焦新架构 UNIX to Linux正当时
- ArcObjects中的IGeometry转成Json
- 多个数组全排列问题
- 关于hashMap的java.util.ConcurrentModificationException解决方法
- Oracle游标
- CentOS 复制文件与文件夹
- BaseExpandableListAdapter
- 调用API判断程序是否正在运行中
- Android 四大组件
- MyEclipse项目中的构建路径和类路径lib的问题
- oracle的正则表达式