欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏开发语言 → 正文
一道关于排列组合的算法题
08-08-15 16:46:47 作者:天方 出处:http://www.cnblogs.com/TianFang

给一个数组,如"123",要求输出出其所有的组合,如"123"对应的输出便是 123、132、213、231、312、322

就这个题本身来说,并不算难,不过当时要求用C语言写这个程序,一时感觉无从下手,我记得当时是花了不少时间,想了好几种算法,写了一大堆代码,估计还写的特别烂,总之搞的我比较郁闷。今天吃晚饭后闲来无事,便用C#写了一下,一气呵成,并且非常精简。

static void Main(string[] args)
{
    List<char> data = new List<char>();
    data.AddRange("123");

    foreach (var item in GetAllSequence(data))
    {
        Console.WriteLine(item);
    }
}

static IEnumerable<string> GetAllSequence(List<char> data)
{
    var count = data.Count;

    if (count == 0)
    {
        yield break;
    }

    if (count == 1)
    {
        yield return data[0].ToString();
        yield break;
    }

    for (int i = 0; i < count; i++)
    {
        char ch = data[i];
        data.RemoveAt(i);
        foreach (var item in GetAllSequence(data))
        {
            yield return ch + item;
        }
        data.Insert(i, ch);
    }
}

由于用了C#中的yield而生成迭代器模式,使得整个程序非常简洁。当然,这个程序的执行效率很低,但是,写这个程序前后花了不到5分钟,算法思路和实

9 7 3 1 2 4 8 :

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    无相关新闻

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号