c# 求一个字符串数组排列组合算法
举例:stringstr1="aa",str2="bb",str3="cc",..........(一直到29,一共29个字符串变量),str29="zz";//字符串1...
举例:
string str1="aa",str2="bb",str3="cc", ..........(一直到29,一共29个字符串变量) ,str29="zz"; //字符串1-29,或者将他们都放入一个字符串数组中也可以。
向最终得到这种结果:
string str=str1+str2+str3+str4+........+str29;
string str=str2+str1+str3+str4+........+str29;
string str=str2+str3+str1+str4+........+str29;
往下继续.........
然后分别求他们这29个字符串的不同组合,并且每组中这个字符串变量只能出现一次。
想到用递归,但是后来想了下,递归的话无法确保每次最终结果都是这不重复的29个字符串组合。实在是头大,没什么灵感。特来求教,大神指点。。如果正确就给分。。 展开
string str1="aa",str2="bb",str3="cc", ..........(一直到29,一共29个字符串变量) ,str29="zz"; //字符串1-29,或者将他们都放入一个字符串数组中也可以。
向最终得到这种结果:
string str=str1+str2+str3+str4+........+str29;
string str=str2+str1+str3+str4+........+str29;
string str=str2+str3+str1+str4+........+str29;
往下继续.........
然后分别求他们这29个字符串的不同组合,并且每组中这个字符串变量只能出现一次。
想到用递归,但是后来想了下,递归的话无法确保每次最终结果都是这不重复的29个字符串组合。实在是头大,没什么灵感。特来求教,大神指点。。如果正确就给分。。 展开
1个回答
展开全部
static void Main(string[] args){
string[] strArrays = { "aa", "bb", "cc"/*,and so on...*/ };
var qv = from so in strArrays
from si in strArrays
select so + si ;
foreach (var item in qv) Console.WriteLine(item);
}
追问
你这个结果是可以得到
aabb
ccdd
aaddccdd
但是我需要的是每次都得到这29个字符串变量的组合,如下:
aabbccddeeff......一直到最后第29个字符串变量值组合。
aaccddbbeeff......
.......
........
这样当中每个变量不重复。你可能没看懂我的要求
追答
OK,算法如下:
static void Swap(String[] strArrays, int a, int b){
var temp = strArrays[a];
strArrays[a] = strArrays[b];
strArrays[b] = temp;
}
static void Permute(String[] strArrays, int m, int n){
int j;
if (m == n){
foreach (var item in strArrays) Console.Write(item);
Console.WriteLine();
}else{
for (j = m; j < n; j++){
Swap(strArrays, m, j);
Permute(strArrays, m + 1, n);
Swap(strArrays, j, m);
}
}
}
static void Main(string[] args){
string[] strArrays = { "aa", "bb", "cc"/*,and so on...*/ };
Permute(strArrays, 0, strArrays.Length);
Console.ReadKey(true);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询