c# 列举出给定字符的所有组合可能

string[]str={"a","b","c","d"}把字符串数组str里面的元素进行组合(例如ab,abc,abcd,bac等等)列举出所有组合,并把新组合的字符串... string[] str={"a","b","c","d"}
把字符串数组 str里面的元素进行组合 (例如ab, abc,abcd,bac 等等)列举出所有组合,并把新组合的字符串添加到string[] tmp={} 数组中,求教怎么写?注:str里面的元素是不确定的,可能有很多个(a,b,c...z)
展开
 我来答
E30814075
2018-12-26 · 超过72用户采纳过TA的回答
知道小有建树答主
回答量:153
采纳率:66%
帮助的人:80.9万
展开全部

楼上的速度很快,递归用的也相当漂亮,瑕疵就是没有考虑到乱序的情况。

我这一串代码你可以试一下


        static void Main(string[] args)
        {
            Console.WriteLine("************************");
            {
                string[] strArr = { "a", "b", "c", "d" };
                OperateStr(strArr);
            }
            Console.WriteLine("");
            Console.WriteLine("************************");
            Console.ReadKey();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="arr"></param>
        static void OperateStr(string[] arr)
        {
            List<string> strList = new List<string>();//定义一个字符串列表,存储组合的字符
            //组合成abcd需要循环3次即length-1次
            for (int i = 0; i < arr.Length - 1; i++)
            {
                if (strList != null && strList.Count > 0)
                {
                    strList.AddRange(BindStrArr(strList.ToArray(), arr));//用拼接出的新数组和原数组继续拼接出多一个字符长度的字符串数组,继续存储在strList中
                }
                else
                {
                    strList.AddRange(BindStrArr(arr, arr));//第一次用原数组和原数组拼接出两个字符长度的新数组,并存储在strList中
                }
            }
            foreach (var str in strList)
            {
                Console.Write(string.Format("{0},", str));
            }
        }
        /// <summary>
        /// 两个数组里的元素进行组合,含有相同元素的跳过
        /// </summary>
        /// <param name="arr1"></param>
        /// <param name="arr2"></param>
        /// <returns></returns>
        static string[] BindStrArr(string[] arr1, string[] arr2)
        {
            List<string> strList = new List<string>();
            string[] arr3;
            foreach (string tmp1 in arr1)
            {
                foreach (string tmp2 in arr2)
                {
                    if (tmp1.Contains(tmp2))
                        continue;
                    strList.Add(string.Format("{0}{1}", tmp1, tmp2));
                }
            }
            arr3 = strList.ToArray();
            return arr3;
        }
三天打鱼N
2018-12-26 · TA获得超过1540个赞
知道大有可为答主
回答量:2032
采纳率:74%
帮助的人:611万
展开全部

 static void Main(string[] args)
        {
            List<string> arr = new List<string>() { "A", "B", "C" ,"D","E"};

            List<string> ret = new List<string>();
            Fun(arr, ret);

            Console.Write(string.Join("\n", ret.ToArray()));

            Console.ReadLine();


        }
        static void Fun(List<string> arr, List<string> ret, int len = 2)
        {
            int[] index = new int[len];
            for (int i = 0; i < index.Length; i++)
            {
                index[i] = i;
            }
            bool ok;
            do
            {

                while (index[len - 1] < arr.Count)
                {
                    string s = "";
                    for (int i = 0; i < len; i++)
                        s += arr[index[i]];
                    ret.Add(s);
                    index[len - 1]++;
                }
                ok = true;
                for (int i = len - 2; i >= 0; i--)
                {
                    if (index[i] < arr.Count - (len - i))
                    {
                        index[i]++;
                        ok = false;
                        for (int j = i + 1; j < len; j++)
                        {
                            index[j] = index[j - 1] + 1;
                        }
                        break;
                    }
                }

            } while (ok == false);
            if (len < arr.Count)
                Fun(arr, ret, len + 1);
        }
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f3c27e9
2018-12-26
知道答主
回答量:11
采纳率:0%
帮助的人:8407
展开全部
可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式