求算法大神指点迷津,数组元素的排列组合

「已注销」 2016-03-14 06:21:01
有一数组aa bb cc
得到所有的组合
aa
bb
cc
aabb
aacc
bbcc
bbaa
ccaa
ccbb
aabbcc
aaccbb
bbaacc
bbccaa
ccaabb
ccbbaa
求大神指点迷津。
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2016-03-15
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static IEnumerable<string> foo(string seed, string[] meta)
        {
            if (seed != "") yield return seed;
            foreach (var item in meta.Where(x => !seed.Contains(x)).SelectMany(x => foo(seed + x, meta)))
                yield return item;
        }
        static void Main(string[] args)
        {
            string[] data = { "aa", "bb", "cc" };
            foreach (var item in foo("", data).OrderBy(x => x.Length))
                Console.WriteLine(item);
        }
    }
}
aa bb cc aabb aacc bbaa bbcc ccaa ccbb aabbcc aaccbb bbaacc bbccaa ccaabb ccbbaa Press any key to continue . . .
「已注销」 2016-03-15
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static IEnumerable<string> foo(string seed, string[] meta)
        {
            if (seed != "") yield return seed;
            foreach (var item in meta.Where(x => !seed.Contains(x)).SelectMany(x => foo(seed + x, meta)))
                yield return item;
        }
        static void Main(string[] args)
        {
            string[] data = { "aa", "bb", "cc" };
            foreach (var item in foo("", data).OrderBy(x => x.Length))
                Console.WriteLine(item);
        }
    }
}
aa bb cc aabb aacc bbaa bbcc ccaa ccbb aabbcc aaccbb bbaacc bbccaa ccaabb ccbbaa Press any key to continue . . .
好强大!
「已注销」 2016-03-15
  • 打赏
  • 举报
回复
引用 3 楼 xianfajushi 的回复:
http://blog.csdn.net/xianfajushi/article/details/50835320
没看懂啊老兄。
「已注销」 2016-03-14
  • 打赏
  • 举报
回复
引用 1 楼 puler 的回复:
不固定长度的,应该是用递归,但是很少用,感觉控制起来不直观 一直是在已知,固定长度的情况下进行组合


for(i=0;i<10;i++){
   for(j=i+1;j<10;j++){
......
   }
}
谢谢回复,是不定长度的。
puler 2016-03-14
  • 打赏
  • 举报
回复
不固定长度的,应该是用递归,但是很少用,感觉控制起来不直观 一直是在已知,固定长度的情况下进行组合


for(i=0;i<10;i++){
   for(j=i+1;j<10;j++){
......
   }
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧