wbz012
wbz012
采纳率0%
2016-04-11 13:20 阅读 1.7k

C# 排列 组合问题,a,b两个字符要生成 n个字符长度的所有排列

请教
两个字符 a,b
生成 n个字符长度的 排列 怎么实现 ,要得到所有的排列
比如 n=5 ,n可以自己定义
比如 "ababa" , aabba, bbaab,........
用代码怎么实现,得到n长度下的所有排列

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • o527883184 o527883184 2016-04-11 13:44

    两个字母 就相当于二进制 0 1,这样就可以考虑使用二叉树,来遍历了。构造一颗深度为 5 的二叉树,遍历就可以了。

    点赞 评论 复制链接分享
  • bbwolfcool bbwolfcool 2016-04-11 14:35

    如果用数学方法计算出结果,可能要好多步,如果简单算可能性,应该是 2*2*2*2*2,如果n=2,就是2的二次方,4个,ab,aa,bb.ba
    如果一定要用2个字符,那么公式就是2^n-2,减2因为,都是a或者都是b两种可能性。

    然后就用递归啊,初始 a a a a a 然后循环,把第一位换成b,也就是 b a a a a a,然后两两交换顺序,把这其中每次交换的结果用数组保留下来(添加到key-value,如果不存在则添加),然后搞2ge
    b,然后再用排序法不停交换。。。。。

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-04-11 15:43
     using System;
    using System.Collections.Generic;
    using System.Linq;
    
    public class Test
    {
        static IEnumerable<string> foo(IEnumerable<string> src, string meta, int n)
        {
            if (src.First().Length == n)
                return src;
            else
                return foo(meta.SelectMany(x => src.Select(y => y + x)), meta, n);
        }
        public static void Main()
        {
            // your code goes here
            foreach (string s in foo("ab".Select(x => x.ToString()), "ab", 5))
                Console.WriteLine(s);
        }
    }
    

    aaaaa
    baaaa
    abaaa
    bbaaa
    aabaa
    babaa
    abbaa
    bbbaa
    aaaba
    baaba
    ababa
    bbaba
    aabba
    babba
    abbba
    bbbba
    aaaab
    baaab
    abaab
    bbaab
    aabab
    babab
    abbab
    bbbab
    aaabb
    baabb
    ababb
    bbabb
    aabbb
    babbb
    abbbb
    bbbbb

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-04-11 15:43
    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-04-11 15:50

    有的人故弄玄虚瞎回答,回答的内容比我的程序都长,也是醉了。

    点赞 评论 复制链接分享
  • herozhangbz herozhangbz 2016-04-12 01:23

    就像5位数的二进制一样,00000-11111分别用a,b替换其中的0,1。

           public  static string Zuhe(int n)
            {
                string str = null;
                string temp = null;
                for (int i = 0; i <= Math.Pow(2, n) - 1; i++)
                {
                    str = Convert.ToString(i, 2);  //转化为2进制
                    str = int.Parse(str).ToString().PadRight(5, '0');
                    temp += str+Environment.NewLine;
                }
                str= temp.Replace("0", "a");
                str= str.Replace("1", "b");
                return str;
            }
    
    点赞 评论 复制链接分享

相关推荐