栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

列出字符串/整数的所有排列

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

列出字符串/整数的所有排列

首先:当然,它闻起来像 递归

由于您也想了解该原理,因此我尽力用人类语言来解释它。我认为大多数时候递归都很容易。您只需要掌握两个步骤:

  1. 第一步
  2. 所有其他步骤(逻辑相同)

人类语言

简而言之:
1. 1个元素的排列是一个元素。
2.一组元素的排列是每个元素的列表,并与其他元素的每个排列连接在一起。

例:

如果集合只有一个元素->
返回它。
烫发(a)- > a

如果集合有两个字符:对于其中的每个元素:返回该元素,并添加其余元素的排列,如下所示:

烫发(ab)- >

a +烫发(b)-> ab

b +烫发(a)-> ba

进一步:对于集合中的每个字符:返回一个字符,该字符与一组>其余集合相结合

烫发(abc)->

a +烫发(bc)-> abcacb

b +烫发(ac)-> bacbca

c +烫发(ab)-> cabcba

烫发(abc … z)->

a +烫发(…),b +烫发(....)
....

我在http://www.programmersheaven.com/mb/Algorithms/369713/369713/permutation-
algorithm-
help/上找到了 伪代码

makePermutations(permutation) {  if (length permutation < required length) {    for (i = min digit to max digit) {      if (i not in permutation) {        makePermutations(permutation+i)      }    }  }  else {    add permutation to list  }}

C#

好的,从http://radio.weblogs.com/0111551/stories/2002/10/14/permutations.html进行更详尽的介绍(由于它被标记为c#):相当冗长,但是我决定复制它无论如何,因此帖子不依赖原始帖子。

该函数接收一个字符串,并记下该精确字符串的所有可能排列,因此,例如,如果提供了“ ABC”,则应溢出:

ABC,ACB,BAC,BCA,CAB,CBA。

码:

class Program{    private static void Swap(ref char a, ref char b)    {        if (a == b) return;        var temp = a;        a = b;        b = temp;    }    public static void GetPer(char[] list)    {        int x = list.Length - 1;        GetPer(list, 0, x);    }    private static void GetPer(char[] list, int k, int m)    {        if (k == m)        { Console.Write(list);        }        else for (int i = k; i <= m; i++) {        Swap(ref list[k], ref list[i]);        GetPer(list, k + 1, m);        Swap(ref list[k], ref list[i]); }    }    static void Main()    {        string str = "sagiv";        char[] arr = str.ToCharArray();        GetPer(arr);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433090.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号