n个A,m个B,k个C的所有组合--Java实现

版权声明:071623 https://blog.csdn.net/weixin_43584220/article/details/88933002

假设有2个A,2个B,2个C
我想表达的思路是这样的
首先将一个A组合 接下来是两个A,它们都是只有一个组合的

A
AA

一个B和两个A的时候

BAA
ABA
AAB

两个B和两个A的时候

B BAA
B ABA
B AAB

ABBA
ABAB

AABB

相当于把两A两B的看成相同的数,那就是4个字符之间有5个空个C插入,那就是5*(两A两B组合的数)=30

CBBAA
CBABA
CBAAB
CABBA
CABAB
CAABB

ACBBA
ACBAB
ACABB
BCAAB
BCABA
BCBAA

AACBB
BBCAA
ABCAB
ABCBA
BACAB
BACBA

AABCB
ABACB
BAACB
BBACA
BABCA
ABBCA

AABBC
ABABC
ABBAC
BABAC
BAABC
BBAAC

好,废话不多说,直接上代码

package cn.LanQiaoBeiAlgorithm.Ravanla;

public class n_A_m_B_k_C_Array {
	public static void main(String[] args) {
		int n = 2;//A
		int m = 2;//B
		int k = 1;//C
		System.out.println(f(n, m)*f(n+m, k);
	}
	//组合方法
	//假如只有1个A和1个B,把这个组合分两个阵营,一个是A阵营(A开头),一个是B阵营(B开头)
	//接下来就都交给递归去处理分阵营的问题了
	private static int f(int n, int m) {
		if(n == 0 || m == 0) return 1;
		return f(n - 1, m) + f(n, m - 1);
	}
}
//https://blog.csdn.net/weixin_43584220/article/details/88910775

打好草稿的时候我Eclipse坏了,验证不了代码准确性,只能拿我之前写过的改改了
Intellij IDEA还不会用

//加多三个D
		int n = 2;//A
		int m = 2;//B
		int k = 1;//C
		int j = 3;//D
		System.out.println(f(n, m) * f(n+m, k) * f(n+m+k, j);

猜你喜欢

转载自blog.csdn.net/weixin_43584220/article/details/88933002