排列、组合、全排列、全组合——Java实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/L_0000/article/details/82560166

排列、组合、全排列、全组合——Java实现

排列的定义: 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列
公式:全排列数f(n)=n!(定义0!=1)

组合的定义:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。

符号说明:

  1. C-Combination 组合数
  2. A-Arrangement 排列数(在旧教材为P-Permutation)
  3. N-Number 元素的总个数
  4. M- 参与选择的元素个数
  5. !- Factorial阶乘

    • 排列
    • 组合
    • 全排列
      所谓全排列,就是打印出字符串中所有字符的所有排列。
      例如输入字符串abc,则全排列是 abc、acb、bac、bca、cab 和 cba

候补

排列方式:

组合方式:

排列数的计算公式:

/**
 * 排列数,A(n,m) = n*(n-1)*(n-2)……*(n-m+1);
 */
public int arragement(int n,int m) {
    if(n<m) {
        System.out.println("n>m,输入错误");
    }
    int mul = 1;
    for(int i = n-m+1;i<=n;i++) {
        mul *= i;
    }
    return mul;
}

组合数的计算公式

/**
 * 组合数,C(n,m) = A(n,m)/m!
 */
public int combination(int n,int m) {
    if(n<m) {
        System.out.println("n>m,输入错误");
    }
    int factM = 1;
    for(int i = 1;i<=m;i++) {
        factM *= i;
    }
    int a = arragement(n,m);
    return a/factM;
}

猜你喜欢

转载自blog.csdn.net/L_0000/article/details/82560166