C# 简单的统计指定几个字符组合的所有结果

比如 用 a,b,c,d 4个字符组成一个8个长度的字符串,问一共有多少可能,应该有4的8次方种,用代码简单实现

复制代码
 private string[] AAA()
        {
            string[] cs = { "a", "b", "c", "d" };
            string[] ts = new string[8];
            string[] ss = new string[Convert.ToInt32(Math.Pow(cs.Length, 8))];
            int index = 0;
            for (int i_0 = 0; i_0 < cs.Length; i_0++)
            {
                for (int i_1 = 0; i_1 < cs.Length; i_1++)
                {
                    for (int i_2 = 0; i_2 < cs.Length; i_2++)
                    {
                        for (int i_3 = 0; i_3 < cs.Length; i_3++)
                        {
                            for (int i_4 = 0; i_4 < cs.Length; i_4++)
                            {
                                for (int i_5 = 0; i_5 < cs.Length; i_5++)
                                {
                                    for (int i_6 = 0; i_6 < cs.Length; i_6++)
                                    {
                                        for (int i_7 = 0; i_7 < cs.Length; i_7++)
                                        {
                                            ts[0] = cs[i_0];
                                            ts[1] = cs[i_1];
                                            ts[2] = cs[i_2];
                                            ts[3] = cs[i_3];
                                            ts[4] = cs[i_4];
                                            ts[5] = cs[i_5];
                                            ts[6] = cs[i_6];
                                            ts[7] = cs[i_7];
                                            ss[index++] = String.Join("-", ts);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return ss;
        }
复制代码

上面的代码显然还是可以优化的

复制代码
private string[] BBB()
        {
            string[] cs = { "a", "b", "c", "d" };
            int power = 8;
            string[] ss = new string[Convert.ToInt32(Math.Pow(cs.Length, power))];
            string[] ts = new string[power];
            int i = 0;
            int index = 0;
            Recur(cs, ref i, power - 1, ts, ref index, ss);
            return ss;
        }

        private void Recur(string[] cs, ref int i, int power, string[] ts, ref int index, string[] ss)
        {
            for (int j = 0; j < cs.Length; j++)
            {
                ts[i] = cs[j];
                if (i < power)
                {
                    i++;
                    Recur(cs, ref i, power, ts, ref index, ss);
                }
                else
                {
                    ss[index++] = String.Join("-", ts);
                }
            }
            i--;
        }
复制代码

 

posted @   WmW  阅读(423)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示