2 wbz012 wbz012 于 2016.04.11 21:20 提问

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

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

7个回答

caozhy
caozhy   Ds   Rxr 2016.04.11 23: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
caozhy   Ds   Rxr 2016.04.11 23:43
caozhy
caozhy   Ds   Rxr 2016.04.11 23:50

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

herozhangbz
herozhangbz   2016.04.12 09: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;
        }
herozhangbz
herozhangbz 有点小问题,不能在右边放0,str = str.ToString().PadLeft(n, '0');
2 年多之前 回复
bbwolfcool
bbwolfcool   2016.04.11 22: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,然后再用排序法不停交换。。。。。

o527883184
o527883184   2016.04.11 21:44

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

o527883184
o527883184 你上网搜一下二叉树 数据结构 有好多 你看一下二叉树的定义 应该就明白了
2 年多之前 回复
wbz012
wbz012 没玩过, 能简单写两句看看吗
2 年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.11 21:33

蓝桥杯 N个字符全排列
n个字符的全排列
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
字符串排列和组合的JAVA实现
字符串的组合: 给一个字符串,比如ABC, 把所有的组合,即:A, B, C, AB, AC, BC, ABC, 都找出来。 解题思路: 假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来我们需要在剩
PHP输出多个元素的排列组合
解决问题:求一个含有N个元素的数组中取出M个元素组成新的数组,一共可以组合成的数组并输出 <?php $arr = array('a','b','c','d'); $result = array(); $t = getCombinationToString($arr, 4); print_r($t); function getCombinationToString($arr, $m) { i
LeetCode排列组合问题合集
78. SubsetsGiven a set of distinct integers, nums, return all possible subsets. 给定一组非重复数字,求出所有可能的子集解析:例如 [1,2,3],解法: 首先放[],然后往已有的[]中放1 1. 首先放1 此时已有[ [], 1 ] 2. 然后对[ [], 1 ] 放2 于是此时有 [ [], [1], [2
常见的排列组合问题
1.在6*9的方格中,以左上角为起点,右下角为终点,每次只能向下或向右走,请问一共有多少种不同的走法。  一共要走13步,其中必然有5步向下,8步向右。那么就是从13步中选5步向下或者从13步中选出8步向右,则共有种。 2.ABCDEFG七人战队,要求A必须在B的左边,但不一定相邻,请问有多少种排法?如果A必须在B的左边,并且一定要相邻,请问一共有多少种排法? 不相邻: 7人全排列
组合数学题目
求由A、B、C、D组成的允许重复的n位排列中,AB至少出现一次的排列数目。
【面试题】2012 多盟 实习笔试
2012年多盟,系统发开,笔试 (1)已知两个长度为N的数组A,B,已分别按升序排列 A。求第N和N+1个数,伪代码实现,并估算复杂度 B,若你的解法时间复杂度为O(logN)。请考虑时间复杂度更快的算法。 (2)一个长度为n的整数数组,数组中任意n-1个数的乘积,有n个值,求这些值中最大的, 只能使用乘法,不能除法, A,请描述算法,不必代码实现;并分析时间复杂度和空间复
java实现字符串排列组合问题
import java.util.ArrayList; import java.util.Collections; /** * 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac, * bca,cab和cba。 * * @author pomay * */ public class S
请编写函数fun,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列
#include int fun(char str[7]); int main() {     char str[7] = {'\n'};     int i = 0;          printf("输入7个字符的字符串:\n");     scanf("%s",str);     fun(str);     for(i = 0 ;i         printf("
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
题目 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。 我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a
元素按值非递减有序排列,设计一个…
#include #define N 10 typedef struct {     int data[N];     int top; }decrease; decrease *initdecrease() {     decrease *s;     s=malloc(sizeof(decrease));     s->top=-1;     return s; } decrease