Java实现排列组合
程序员文章站
2022-05-21 23:08:22
...
基本概念
阶乘
在介绍排列组合前首先要介绍阶乘,因为很多排列组合的运算都是要用上阶乘。阶乘的定义如下:一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。
即n!=1×2×3×...×n
。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n
排列组合
排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。下面是整理后的资料:
名称 | 排列 | 组合 |
---|---|---|
定义 | 从n个不同的元素中取出m个元素,按一定顺序进行排序 | 从n个不同的元素中取出m个元素,不考虑排序 |
基本写法 | ||
计算公式 | , , , | , , , |
关系 | ||
性质 | , |
实现代码
阶乘
/**
* 非递归版阶乘
* @param n
* @return
*/
public int factorial(int n){
if(n==0){
return 1;
}else{
int result=1;
for(int i=1;i<=n;i++){
result*=i;
}
return result;
}
}
/**
* 递归版阶乘
* @param n
* @return
*/
public int factorial(int n){
if(n==0){
return 1;
}else{
return n*factorial(n-1);
}
}
排列组合
/**
* 排列
* @param m 上标
* @param n 下标
* @return
*/
public int permutation(int m,int n){
if(n==0){
return 1;
}
int result=1;
for(int k=n;k>=n-m+1;k--){
result*=k;
}
return result;
}
/**
* 组合
* @param m 上标
* @param n 下标
* @return
*/
public int combination(int m,int n){
return permutation(m,n)/permutation(m,m);
}
下一篇: Spring源码-创建单例bean的过程