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个字符串组合。实在是头大,没什么灵感。特来求教,大神指点。。如果正确就给分。。
展开
 我来答
仙戈雅3n
2017-08-28 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:901万
展开全部
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);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式