排列组合--原理及实现

1. 定义:

组合数:从m个不同元素中任取n(n<=m)个元素拼成一组,叫做从m中取n个元素的组合。能够取的所有可能叫组合数。公式如下:

全排列:从m个不同元素中,任取n(n<=m)个元素按照一定顺序排列起来,叫做从m中取n个数的一个排列。当m=n时的所有排列情况,叫做全排列。

全排列数f(n) = n!

区别:排列可以看作是同样情况下组合的子集,由于需要按顺序排列,因此少了一些情况。

2. JAVA实现

-->全组合:

运行结果:


运行过程:

举例3个元素:a,b,c。所以一共有2^3=8个结果。所以i=0,1,2,3,...,7分别对应输出以上结果

将i转换为二进制i=1=001,i=2=010,i=3=011

1)j=0;1<<j =001与i=001相与返回1 输出a

-->全排列:

递归

* 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理

* 从而得到所有元素的全排列。以对字符串abc进行全排列为例,我们可以这么做:以abc为例:

* 固定a,求后面bc的排列:abc,acb,求好后,a和b交换,得到bac

* 固定b,求后面ac的排列:bac,bca,求好后,c放到第一位置,得到cba

* 固定c,求后面ba的排列:cba,cab。

** 即递归树:

str:   a      b        c

ab ac    ba bc      ca cb

result:  abc acb    bac bca        cab cba


运行结果:


推荐阅读更多精彩内容

  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 1,767评论 0 18
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-code.h...
    eddy_wiki阅读 6,318评论 0 28
  • 在进行排列组合计算以及概率计算时我们经常会遇到一些具有相同性质的问题。假设问题的样本空间Ω中一共有k种类型的元素α...
    欧阳大哥2013阅读 4,504评论 0 5
  • 字符串的全排列 题目描述: 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a...
    MinoyJet阅读 3,373评论 4 10
  • 西瓜中间那块儿 烫手的红薯 巧克力含着化了满口 我喜欢你 我才不会说出口 八百米后的冰可乐 周日不用早起的被窝 我...
    郝芝麻阅读 25评论 0 0